这个示例是不好的做法,因为它会进行多次数据库调用吗?
我可以通过任何方式进行一次数据库调用吗?喜欢使用' where'而不是' firstOrDefault'并将FlagDate与我的messageList中消息的每个日期进行比较?
foreach (var message in messageList)
{
var dayFlag = db.DayFlags.FirstOrDefault(x =>
x.FlagDate == message.MessageDate);
}
答案 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;