实体框架:LINQ to Entities仅支持转换EDM原语或枚举类型

时间:2014-12-15 22:35:36

标签: linq entity-framework

以下查询用于在没有问题的情况下运行,直到最近的更新(最新的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

0 个答案:

没有答案