首页 新闻 会员 周边

关于lambada的一个问题

0
悬赏园豆:50 [已解决问题] 解决于 2014-04-29 01:12

问题:用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()+";"))--似乎是这句报错了

LIU-IT的主页 LIU-IT | 初学一级 | 园豆:157
提问于:2014-04-28 11:00
< >
分享
最佳答案
0

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();你可以尝试一下

收获园豆:50
搁浅拾贝 | 菜鸟二级 |园豆:254 | 2014-04-28 11:24

非常感谢您的答复。

我还想问一下:

MylineInfo.where(a=>a.lineID.Tostring().Contains("这里是线路ID"))--这种是可以的

MylineInfo.where(a=>"这里是多个线路ID".Contains(a.lineID.Tostring()))--这种为什么会错呢?

LIU-IT | 园豆:157 (初学一级) | 2014-04-28 11:39

@LIU-IT: 

多个的话,你可以遍历,但我觉得你这个是作为条件的,应该是唯一的才对,再排序一下就可以了,如果不行,你想想的逻辑有没有错,你还可以先写成SQL语句,要是可以实现了,再转成lamda表达式。

搁浅拾贝 | 园豆:254 (菜鸟二级) | 2014-04-28 11:52

@搁浅拾贝: 最后解决方法是这样的:从表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 | 园豆:157 (初学一级) | 2014-04-29 01:07

@LIU-IT: @搁浅拾贝: 分还送不了,必须选你为最佳答案才能送分,为了不误解遇到同样问题人以为你的答复为最终解决方案。故。。。。谢谢

LIU-IT | 园豆:157 (初学一级) | 2014-04-29 01:11

@LIU-IT: 呵呵,送不送分不重要,重点是你的问题解决了,我只是根据自己的思路,跟你留个言,希望对你有帮助。你这里也用到了遍历,呵呵,谢谢。

搁浅拾贝 | 园豆:254 (菜鸟二级) | 2014-04-29 13:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册