Linqで次のSQLクエリを再現しようとしています。同じテーブル/オブジェクトへの2つの結合でLinqを使用する複数の外部結合。 SQLを取得し、エンティティにLinqが必要
select
dbo.Documents.DocId,
dbo.Documents.ReykerAccountRef,
dbo.Documents.ReykerClientId DocClientID,
CAAs.ClientId CAAClientIDCheck,
ClientData.FullName ClientFullName,
CAAs.IFAId,
AdvisorData.FullName AdvisorFullName
from dbo.Documents
left join
dbo.CAAs on dbo.Documents.ReykerAccountRef = dbo.CAAs.AccountRef
left join
dbo.hmsProfileDatas AS ClientData
on
dbo.CAAs.ClientId = ClientData.ReykerClientID
left join
dbo.hmsProfileDatas AS AdvisorData
on
dbo.CAAs.IFAId = AdvisorData.ReykerClientID
私はかつてアドバイザフルネームのクライアントフルネームや他のために、二度同じテーブルにリンクしようとしています。
私は、LINQで生産したい基本的なSQLは
select table1.*,table2.*,a.Fullname, b.Fullname
from table1
left join
table2 on table1.t2Id = table2.Id
left join
table3 AS a
on
table2.t3Id1 = table3.id1
left join
table3 AS b
on
table2.t3Id2 = table3.id2
ので、表1は、表2に結合されているとテーブル2は、異なるフィールド(ID1とID2)にTABLE3する2つの外部キー(t3Id1とt3Id2)があります。
これは、私はいくつかのガイダンス以下しようとしたものですが、それは何も返しませんよ!何がうまくいかないの?
var results3 = from doc in DataContext.Documents
from caa
in DataContext.CAAs
.Where(c => c.AccountRef == doc.ReykerAccountRef)
.DefaultIfEmpty()
from cpd
in DataContext.hmsProfileDatas
.Where(pdc => pdc.ReykerClientID == caa.ClientId)
.DefaultIfEmpty()
from apd
in DataContext.hmsProfileDatas
.Where(pda => pda.ReykerClientID == caa.IFAId)
.DefaultIfEmpty()
select new DocumentInList()
{
DocId = doc.DocId,
DocTitle = doc.DocTitle,
ReykerDocumentRef = doc.ReykerDocumentRef,
ReykerAccountRef = doc.ReykerAccountRef,
ClientFullName = cpd.FullName,
AdvisorFullName = apd.FullName,
DocTypeId = doc.DocTypeId,
DocTypes = doc.DocTypes,
DocDate = doc.DocDate,
BlobDocName = doc.BlobDocName,
UploadDate = doc.UploadDate,
};
あなたはLINQクエリからSQLを「取得」と私はSQL Azureのに対して、これを使用していますし、SQLを確認する方法を働いていないDbの – NSGaga
号にそれを試してみました。プロファイリングはありません。今すぐ管理パネルで確認してください! – NER1808
しかし、あなたはそれをどんなDb、CEでもローカルでテストすることができます。あなたのことをまっすぐにすることをお勧めします。 EF/CFでは、物事を「動かす」のが簡単です。なぜそうしないのですか? – NSGaga