这是我对Linq的第一次尝试。我设法加入一个列表和一个数据集,但加入部分仍需要一个微调。 Linq的代码如下。
DataTable dt = CacheManager.Gtipler.Tables[0];
List<TescilInfo> GtiplerList = new List<TescilInfo>();
//a foreach loop here to populate the list
var result = from db in dt.AsEnumerable()
join tescil in GtiplerList on db.Field<string>("Kod") equals tescil.GtipNo
select db.Field<string>("AdiTR");
我需要做的是检查tescil.GtipNo(8个字符的字符串)是否以00结尾,它应该被缩减为6个字符的字符串,并在这样的连接中使用。 即;
如果是12345600,则将用作123456。
有没有办法在Linq查询中执行此操作?如果是,怎么样?
答案 0 :(得分:2)
我认为你正在寻找let声明。试试这个:
var result = from db in dt.AsEnumerable()
join tescil in temp on db.Field<string>("Kod") equals tescil.GtipNo
where tescil.GtipNo.Substring(6,2) == "00"
select db.Field<string>("AdiTR");
EDIT。解决方案2没有让操作员:
var result = from db in dt.AsEnumerable()
join tescil in GtiplerList on db.Field<string>("Kod") equals (tescil.GtipNo.EndsWith("00") ? x.Substring(0, 6) : x)
select db.Field<string>("AdiTR");
EDIT。 2 - 聊天后,我明白你需要什么。
要执行此类连接,您只需在equals运算符后更改部分,请参阅下文:
<column name="age" not-null="true" default="18"/>
因此,上面的代码会将equals运算符的右侧设置为正确值,具体取决于GtipNo是否以00结尾。
答案 1 :(得分:0)
String.TrimEnd()将删除给定字符的所有尾随事件(在本例中为“0”)并返回一个新的修剪字符串。您可以在“join ... on ...”语句中使用此方法。
https://msdn.microsoft.com/en-us/library/system.string.trimend(v=vs.110).aspx
相反,只删除两个尾随零(而不是一个,三个或更多),您将需要更复杂,如另一个答案。