もう1つの結合で拡張する必要がある、かなり醜いクエリがあります。クエリのビルドでは、NullReferenceExceptionランタイムがスローされます。私は例外の詳細について苦労しているので、私はTargetSite/CustomAttributes/Message = "The method or operation is not implemented."
にメッセージを見つけましたが、どの方法がわからないのですか?EF複数の列のLinq結合でNullReference例外がスローされる
MarkedItems
は新しい結合で、問題は複数の列の結合であるか、group by節に新しい表を追加する必要があると思います。 EF6でLinqPadで同じクエリが実行されるため、これはまだEF7で実装されていないものでなければなりません。
EFコアバージョンは1.1.2です。
クエリ:私は私のクエリで実際の問題を見つけることができたコメントへの
var inventory = (from it in _ctx.Items
join i in _ctx.Inventories on it.Id equals i.ItemId into iit
from i in iit.DefaultIfEmpty()
join m in _ctx.MarkedItems on
new {
eancode = i.EANCode,
projectid = i.ProjectId
}
equals new {
eancode = (m != null ? m.EANCode : string.Empty),
projectid = (m != null ? m.ProjectId : Guid.Empty)
} into im
from m in im.DefaultIfEmpty()
where it.ProjectId == cmp.ProjectId
group i by new {
EANCode = it.EANCode,
ItemNo = it.ItemNo,
Name = it.Name,
BaseQty = it.BaseQty,
Price = it.Price,
m = (m != null ? m.EANCode : null)
} into lg
select new ComparisonBaseModel() {
EANCode = lg.Key.EANCode,
ItemName = lg.Key.Name,
Price = lg.Key.Price,
ScanQty = lg.Sum(s => s != null ? s.ScanQty : 0),
BaseQty = lg.Key.BaseQty,
DiffQty = lg.Sum(s => s != null ? s.ScanQty : 0) - lg.Key.BaseQty,
DiffPrice = lg.Key.Price * (lg.Sum(s=> s!= null ? s.ScanQty : 0) - lg.Key.BaseQty),
AllTasked = !lg.Any(s=>(s != null && s.InventoryTaskId == null) || s==null),
Flagged = lg.Key.m != null
}).Where(x=>x.DiffQty != 0);
'i.EANCode'と' i.ProjectId'を 'i?.EANCode'と' i?.ProjectId'に置き換えてみてください。 – dasblinkenlight
これは速く、ありがとう。私?型の不一致により働いたが、 'eancodeは=(I = nullのi.EANCode!?:String.Emptyを)していない、 PROJECTID =(I = nullのi.ProjectId:!?Guid.Empty)'行なったし、それが働いています! – Perrier
私たちが比較できるように、** **仕事をしたクエリを含めてください。 – mjwills