次のクエリは EF5 ではうまく機能していましたが、EF6 ではエラーが発生します。私は DbContext と CodeFirst を使用しています。
EF6 で発生したエラー:
型 'System.Linq.IQueryable
1[[<>f__AnonymousType5
4[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=]をキャストできませんニュートラル、PublicKeyToken=b77a5c561934e089]、[System.Int32、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089]、[System.Int32、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089] ]、Wms.Domain、Version=1.0.0.0、Culture=neutral、PublicKeyToken=85d69d39f5becc93]]' を入力して、'System.Data.Entity.Core.Objects.ObjectQuery1[[<>f__AnonymousType5
4[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32 、mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089]、[System.Int32、mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089]]、Wms.Domain、バージョン = 1.0.0.0 、カルチャ = ニュートラル、PublicKeyToken = 85d69d39f5becc93]]'. LINQ to Entities は、EDM プリミティブ型または列挙型のキャストのみをサポートします。
クエリ (簡略化):
var unitsPerPosition = context.Positions.Include(p => p.Unit).Select(x => new { Unit = x.Unit, Position = x });
var orders = (
from order in context.Orders.Include(x => x.SourceLocation);
join unitPosition in unitsPerPosition on order.UnitId equals unitPosition.Unit.UnitId
group new { order, unitPosition } by new { LocationId = order.SourceLocationId, Level = unitPosition.Position.Level } into groupOrders
where groupOrders.Key.LocationId != null
select new {
LocationId = groupOrders.Key.LocationId.Value,
Level = groupOrders.Key.Level,
LoadingOrders = groupOrders.Count(),
UnloadingOrders = -1 }
);
IList<LocationChannels> searchResult = (from s in context.Locations
.Include(s => s.Positions)
.Include(s => s.Positions.Select(sp => sp.Unit))
let channels = from p in s.Positions
where p.LocationId == s.LocationId
group p by new { p.LocationId, p.Column, p.Level } into channelsGroup
join order in orders on new { channelsGroup.Key.LocationId, channelsGroup.Key.Level }
equals new { order.LocationId, order.Level } into ordersGroup
from o in ordersGroup.DefaultIfEmpty()
select new Channel
{
LocationId = channelsGroup.Key.LocationId,
Column = channelsGroup.Key.Column,
Level = channelsGroup.Key.Level
}
select new LocationChannels
{
Location = s,
Channels = channels,
})
.Where(predicate).ToList();
問題は、変数「orders」にロードされた匿名型との左側の結合にあるようです。また、「注文」クエリに ToList() を追加しようとしましたが、エラーは次のように変わりました。
タイプ「匿名タイプ」の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。
誰かがそれを修正する方法についてのヒントを教えてもらえますか?
更新:このバグは確認され、EF 6.0.2 で解決されました。CodePlex の問題を参照してください。