问题:用lambada表达式去查找一个时间段的旅游线路有哪些。
数据表设计:由于一条线路有多个不同出行时间,所以分两张表:线路基本信息表(lineInfo)、出行时间表(outSetInfo)。
表字段如下:lineInfo{lineID,lineName......},outSetInfo{outID,outTime,lineID....}
lineID、outID字段都是相应表的主键,类型为int型,outSetInfo表中的lineID为外键。
我目前是这样写的,但报错了,请大牛们帮我看看是哪里错了?正确的应该怎么做?如下:
把outSetInfo表属于某一时间段的记录查找出来,并把表中的字段lineID并成“lineID1;lineID2;lineID3;.....”形式字符串strlineIDs。
然后用lambada表达式查找出线路:MylineInfo为lineInfo表的实体集合。
MylineInfo.where(a=>strlineIDs.Contains(a.lineID.Tostring()+";"))--似乎是这句报错了
var quest= lineInfo.Join(outSetInfo,
a => a.lineID,
b=> b.lineID,
(a, b) => new { a, b}).AsEnumerable().OrderBy(e => e.b.lineID).
Where(e => e.a.lineID==e.b.lineID).ToArray();你可以尝试一下
非常感谢您的答复。
我还想问一下:
MylineInfo.where(a=>a.lineID.Tostring().Contains("这里是线路ID"))--这种是可以的
MylineInfo.where(a=>"这里是多个线路ID".Contains(a.lineID.Tostring()))--这种为什么会错呢?
@LIU-IT:
多个的话,你可以遍历,但我觉得你这个是作为条件的,应该是唯一的才对,再排序一下就可以了,如果不行,你想想的逻辑有没有错,你还可以先写成SQL语句,要是可以实现了,再转成lamda表达式。
@搁浅拾贝: 最后解决方法是这样的:从表outSetInfo中查找到该时间段的所有线路ID;存到链表listID上。然后根据listID链表的ID号从线路基本信息表中查找到线路信息。关键代码如下:
List<decimal> listID = new List<decimal>();
foreach (DataRow dr in lineid.Rows)
{
listID.Add(Convert.ToDecimal(dr[0]));
}
MylineInfo= MylineInfo.Where(a => listID.Contains(a.LineId));
最后非常感谢你的回答,送上分给你。
@LIU-IT: @搁浅拾贝: 分还送不了,必须选你为最佳答案才能送分,为了不误解遇到同样问题人以为你的答复为最终解决方案。故。。。。谢谢
@LIU-IT: 呵呵,送不送分不重要,重点是你的问题解决了,我只是根据自己的思路,跟你留个言,希望对你有帮助。你这里也用到了遍历,呵呵,谢谢。