【发布时间】:2015-03-22 21:05:39
【问题描述】:
我有一张有订阅者的桌子。自特定日期以来,每个订阅者都在关注目标。有关目标的新信息正在一个名为 TargetDatas 的表中累积。
我想创建一个需要获取报告的订阅者列表,其中包含自上次报告以来有关目标的更新/或自跟踪目标之日起未发布任何报告。
我尝试了 2 天来找出一个 linq 查询来获取该列表,但失败了。我可以获得列表的唯一方法是这样的:
List<Subscriber> outlistl = new List<Subscriber>();
foreach (Subscriber s in db.Subscribers)
{
bool foundUpdate = false;
foreach (TargetSubscriber ts in s.TargetsX)
{
//has this subscriber received a report in the past
//if yes, since that date
//otherwise, since the target is being watched
DateTime fromDate;
var latestReport = s.SubscriberReports.OrderByDescending(sr => sr.ToDate).FirstOrDefault();
if (latestReport != null)
{
fromDate = latestReport.ToDate;
}
else
{
fromDate = ts.CreatedDate;
}
foreach (TargetData td in ts.Target.TargetDatas)
{
if (td.CreatedDate > fromDate)
{
outlistl.Add(s);
foundUpdate = true;
break;
}
}
if (foundUpdate) { break; }
}
if (foundUpdate) { break; }
}
当我第一次运行它时出现错误:
已经有一个打开的 DataReader 与此命令关联,必须先关闭。
经过一些研究,我发现添加
MultipleActiveResultSets=True;
到我的连接字符串摆脱了那个错误,我得到了我需要的结果。
必须有更好的方法。在我没有将 MultipleActiveResultsSets 设置为 true 的情况下,有人可以告诉我应该如何完成。
【问题讨论】:
-
你有什么具体原因不想将 MultipleActiveResultSets 设置为 true 吗?
-
不,我只是想如果默认情况下它不是真的,可能会有影响。被告知这是常见的做法
标签: c# sql-server entity-framework linq-to-entities connection-string