用linq替换字符串

时间:2015-08-04 19:48:33

标签: c# string linq

我有这个查询,它假设获取IP地址并将它们与位于另一个表上的DeviceUID匹配。我想替换“。”在IP地址中使用“0”,但我现在运行代码的方式不会替换“。”

任何人都可以帮助我。

 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 个答案:

答案 0 :(得分:1)

首先String.Replace返回一个包含替换字符的新字符串,因此您不需要构造函数new String(char[])ctor)。

其次,字符串替换没有明显的错误。 例如"127.0.0.1".Replace(".","0")返回"127000001" 因此,您必须更准确地了解“错误”。

第三,您的逻辑是左连接,因此如果您在创建null时期望e ATTModel的值,则必须在e.Field<String>("Ip Address")中检查空值。 (可以猜测dxlXsDataTableDataSet,因此行不太可能是null

答案 1 :(得分:0)

Join中进行替换后,您只是为了进行连接而创建一个新字符串。该字符串已分配或存储在任何位置,因此e.Field<String>("Ip Address")仍将具有相同的值(带点)。

如果您需要ATTIP将值.替换为0(虽然我不确定这是否真的有意义),那么您可以执行以下操作:< / p>

 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();