如何使lambda做一个db调用而不是几个

时间:2013-10-10 08:56:26

标签: c# linq lambda

这个示例是不好的做法,因为它会进行多次数据库调用吗?

我可以通过任何方式进行一次数据库调用吗?喜欢使用' where'而不是' firstOrDefault'并将FlagDate与我的messageList中消息的每个日期进行比较?

foreach (var message in messageList)
{
    var dayFlag = db.DayFlags.FirstOrDefault(x => 
                                    x.FlagDate == message.MessageDate);
}

2 个答案:

答案 0 :(得分:4)

如果只想检索messageList中相应Date的dayFlags,则需要先在单独的列表中提取日期,然后将其传递给Linq To Sql查询。

请注意,要仅检索每个日期的第一个DayFlags,您需要按日期对标记进行分组。

var dates = messageList.Select(m => m.MessageDate).ToList();
var dayFlags = db.DayFlags.GroupBy(flag => flag.FlagDate)
                          .Where(group => dates.Contains(group.Key))
                          .Select(group => group.First());

答案 1 :(得分:0)

这是linq的解决方案:

var dates = messageList.Select(m => m.MessageDate).ToList();
var dayFlags = from df in db.DayFlags
               where dates.Contains(df.FlagDate)
               select df;