気にしないで、代わりに join/into 構文で解決しました。やっぱり必要なのかもしれません
EntityFramework に対して動作するように Linq 外部結合を取得しようとしています。
public List<OSCDagbokDTO> FillDataForOSCDagbokSO(List<OSCDagbokDTO> oscdagboklista)
{
var kalla_idn = oscdagboklista.Select(k => k.Kalla_id.GetGuidOrNull()).Distinct().ToList();
var kallaLista = (from k in _gemensamEntityContext.Kalla
where kalla_idn.Contains(k.Kalla_id)
select new KallaDTO()
{
Kalla_id = k.Kalla_id,
KallaText = k.KallaText
}).ToList();
var nyOSCDagbokLista = (from o in oscdagboklista
from k in kallaLista.DefaultIfEmpty()
where o.Kalla_id.GetGuidOrNull() == k.Kalla_id
select new OSCDagbokDTO()
{
Id = o.id,
Datum = o.Datum,
Enhet_id = o.Enhet_id,
Handelse = o.Handelse,
Kalla = k,
Kalla_id = o.Kalla_id,
}).ToList();
return nyOSCDagbokLista;
}
最初のステートメントは、受信リストのプロパティから ID のリストを取得しています。
2 つ目は、そのリストから DTO オブジェクトを作成することです。
3 つ目は、(思ったとおり) 外部結合を使用して着信リストからすべての項目を取得し、DTO リスト (kallaLista) と結合します。私は DefaultIfEmpty() を使用しています。これは、着信リストからアイテムを除外しないと思っていましたが、そうです!
さまざまなサイトから理解したように、「結合」構文は使用していません。上記の構文は問題ないはずです。より古風ですが、私はそれが好きです。
DefaultIfEmpty() を使用しているときに、DTO リストにないときに受信リストの項目が除外されるのはなぜですか?