我有这个查询,它假设获取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();
答案 0 :(得分: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
)
答案 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();