以下查询用于在没有问题的情况下运行,直到最近的更新(最新的asp.net Web应用程序使用框架4.5而不是4.EF版本6没有改变)。
var criteria = (from c in context.CruiseCalendar
where c.ShipId == sourceId
&& c.CruiseDayDate >= dateRange.Start
&& c.CruiseDayDate <= dateRange.End
select new
{
Date = c.CruiseDayDate,
DestinationId = c.ListingId
});
var rendezvous = (from r in context.CruiseCalendar
where (criteria.Any(d => d.Date == r.CruiseDayDate
&& d.DestinationId == r.ListingId))
select r).GroupBy(x => x.CruiseDayDate)
.Where(x => x.Count() >= shipCount)
.SelectMany(x => x)
.OrderBy(r => r.CruiseDayDate)
.ToList();
现在我收到了标题中提到的错误。我已经尝试将.ToList()附加到&#39;条件&#39;查询,它产生一个不同的异常:无法创建类型&#39;匿名类型&#39;的常量值。在此上下文中仅支持原始类型或枚举类型。
我尝试查询数据的方式有问题吗?有没有一种替代方法可以满足以下需要:a)生成匿名对象的集合,以及b)根据这些标准运行查询? (我在SQL中尝试了这一点,但我试图用纯EF / Linq方法来避免这种情况。)
顺便说一句,如果我不清楚我在这里尝试实现的是一些测试数据:(为了便于阅读,我使用了ShipName和PortName而不是shipID和PortId
CruiseDayDate / ShipName / PortName
01/July/2014, Nostromo, Miami
01/July/2014, Potemkin, Miami
01/July/2014, Titanic, San Juan
02/July/2014, Nostromo, Freeport
02/July/2014, Potemkin, Labadee
02/July/2014, Titanic, Freeport
使用Nostromo作为输入参数,第一个查询会找出此船的位置以及何时。 (7月1日迈阿密,7月2日自由港) 第二个问题是找出诺斯特罗莫会和哪些其他船只交会。用。即7月1日与波将金(迈阿密),7月2日与泰坦尼克号(自由港)。
02/July/2014 Titanic, Freeport