2015-08-04 3 views
0

У меня есть этот запрос, он должен получить IP-адреса и сопоставить их с DeviceUID, которые находятся в другой таблице. Я ищу заменить «.». в IP-адресе с «0», но способ, которым я запускаю код прямо сейчас, не заменяет «.».Замена строки с помощью linq

Может ли кто-нибудь помочь мне с этим, пожалуйста.

var etjoin = (from e in dxlXs.AsEnumerable() 
       join t in tstarresults on new String(e.Field<String>("Ip Address").Replace(".","0").ToArray()) equals t.DeviceUID 
       into leftjointable 
       from x in leftjointable.DefaultIfEmpty() 
       select new ATTModel 
       { 
        ATTIP = e != null ? e.Field<String>("IP Address") : "N/A", 
        ATTICCID = e != null ? e.Field<String>("ICCID") : "N/A", 
        ATTSTATUS = e != null ? e.Field<String>("SIM Status") : "N/A", 
        ATTSession = e != null ? e.Field<String>("In Session") : "N/A", 
        ATTActivated = e != null ? e.Field<String>("Activated") : "N/A", 
        IP = x != null ? x.DeviceUID : "N/A", 
        VehicleName = x != null ? x.VehicleName : "N/A", 
        VehicleGroupName = x != null ? x.VehicleGroupName : "N/A", 
        PhoneNumber = x != null ? x.UserDefinedColumn2 : "N/A" 
       }).ToList(); 
+2

Ну заменить аккумулятор находится в * join * - где вы пытались выполнить замену? Можете ли вы показать короткий, но полный пример, демонстрирующий проблему? (Только пара свойств будет в порядке ...) –

+0

Поскольку Джон говорит, что вы делаете замену в соединении - если вы хотите его в ATTModel, вам также понадобится заменить его. – Chris

+0

да, у меня есть это в соединении, потому что dxlXs находится на листе excel, а tstarresults - в таблице sql. пример Я хочу 123.34.45.67 преобразовать в 123034045067, чтобы найти DeviceUID 123034045067 в таблице SQL – AMore

ответ

1

Первый String.Replace возвращает новую строку с замененными символами, так что вам не нужен конструктор new String(char[]) (ctor).

Во-вторых, нет ничего явно неправильного в замене строки. , например. "127.0.0.1".Replace(".","0") возвращает "127000001" Таким образом, вы должны быть более точными в отношении того, что является «неправильным».

Третья логика является левое соединение, так что если вы ожидаете null значения e при создании вашего ATTModel вы должны проверить нуль в e.Field<String>("Ip Address") тоже. (Можно догадаться dxlXs является DataTable или DataSet таким образом ряды не вероятно быть null)

0

С заменить аккумулятор в Join, вы создаете новую строку только для целей создания соединения. Эта строка назначается или хранится в любом месте, поэтому e.Field<String>("Ip Address") будет по-прежнему иметь такое же значение (с точками).

Если вам нужно ATTIP иметь значение с . заменены 0 (хотя я не уверен, что на самом деле имеет смысл), то вы могли бы сделать что-то вроде:

var etjoin = (from e in dxlXs.AsEnumerable() 
       let temp = e != null ? e.Field<String>("Ip Address").Replace(".","0") : "N/A" 
       join t in tstarresults on temp equals t.DeviceUID 
       into leftjointable 
       from x in leftjointable.DefaultIfEmpty() 
       select new ATTModel 
       { 
        ATTIP = temp, 
        //... 
       }).ToList(); 
Смежные вопросы