サンプルサイトごとに複数のレコードを持つことができる3つの子テーブルを持つサンプルサイトテーブルがあります。左外部結合を行う必要があったので、すべてのサンプル・サイトを取得する必要がありました。たとえすべての子レコードが関連付けられていなくても(テーブルの1つが現在空です)。LINQ - 最近のレコードの複数の左外部結合のみ
SampleSiteDataViewModel viewModel =
(from s in db.SAMPLESITES_EVW
from b in db.BACTERIA_EVW.Where(b => b.FIELDSITEID == fieldSiteId).DefaultIfEmpty()
from c in db.CHEMISTRY_EVW.Where(c => c.FIELDSITEID == fieldSiteId).DefaultIfEmpty()
from m in db.MACROS_EVW.Where(m => m.FIELDSITEID == fieldSiteId).DefaultIfEmpty()
where s.FIELDSITEID == fieldSiteId
select new SampleSiteDataViewModel
{
MPN_ECOLI = b.MPN_ECOLI,
DO_PERCENT = c.DO_PERCENT,
PH = c.PH,
TDS = c.TDS,
TEMP_C = c.TEMP_C,
OE = m.OE,
DESCRIP = s.DESCRIP
}).FirstOrDefault();
しかし、私は複数のレコードが存在する場合、それは「にISNので、これは必ずしも、最も最近の細菌/化学/マクロの記録を返さないことに気づいた。私はSOに行ったいくつかの研究に基づいて、私はこれがしました1対1の関係。だから、私は .OrderByDescending(b => b.SAMPLEDATETIME).FirstOrDefault()
で.DefaultIfEmpty
を交換しようとしたが、私はこのエラーを得た:
「タイプの表現 『をBACTERIA_EVW』失敗したソースタイプ 『DbSet』型推論とクエリ式に句から、その後に許可されていません。 'SelectMany'の呼び出しで
レコードが存在しない状況を考慮しながら最新のレコードだけを正しく選択するにはどうすればよいですか?私はそれを複数のlinqクエリに分割する方が簡単だと思いますが、可能であれば、単一のデータベース呼び出しでそれを実行したいと思います。
ETA - これはEntity Frameworkの "データベースからコードを最初に読み込む"モデルを使用してSQL ServerにロードされたESRIジオデータベースを使用しています。
@Gert Arnold - これは実際にはESRIジオデータベースであり、モデルを「データベースからコードを最初に」追加する必要があったため、あなたの質問を理解していればプロパティ。 – Ella
私はLINQ to SQLの意味について誤解されていたはずです。タグをEntity Frameworkに更新します。 – Ella