如何使 lambda 执行一个数据库调用而不是多个数据库调用

本文关键字:调用 数据库 一个 lambda 何使 执行 | 更新日期: 2023-09-27 18:34:39

这个例子是不是不是一个不好的做法,因为它进行了多次数据库调用?

有什么方法可以对一个数据库调用进行此操作吗?比如使用"where"而不是"firstOrDefault",并将FlagDate与我的messageList中邮件上的每个日期进行比较?

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

如何使 lambda 执行一个数据库调用而不是多个数据库调用

如果只想检索与 messageList 对应的 date,则需要先在单独的列表中提取日期,然后将其传递给 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());

这是使用 linq 的解决方案:

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