如何使 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);
}
如果只想检索与 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;