LINQで少し弱いと言って申し訳ありませんが、複雑なLINQの作業を開始する前にSQLクエリを作成します。LINQ複数のON OR条件で左結合
私はどのようにOR
オペレータとconditons ON複数でLEFT JOIN
とLINQには、このSQLクエリを変換することをお願いしたいと思います。、
m.MerchandiseId
がONの状態での二回に使用
SELECT
*
FROM
Inbox AS i
INNER JOIN [User] AS u ON i.FromUserId = u.UserId
LEFT OUTER JOIN Merchandise AS m ON
u.MerchandiseId = m.MerchandiseId
OR
i.ToMerchantId = m.MerchandiseId
WHERE
i.ToCompanyId = 10
OR
i.FromCompanyId = 10
var message = (from i in db.Inbox
join u in db.User on i.FromUserId equals u.UserId
join m in db.Merchandise on u.MerchandiseId equals m.MerchandiseId //here I want to ON i.MerchantId = m.MerchandiseId, but it doesn't allow
where i.ToCompanyId == user.CompanyId || i.FromCompanyId == user.CompanyId
orderby i.CreatedAt descending
group m.MerchandiseId by new { m.MerchandiseId, m.MerchandiseName } into grp
select new
{
MerchandiseId = grp.Key.MerchandiseId,
MerchandiseName = grp.Key.MerchandiseName,
InboxMessage = (from e in db.Inbox
join us in db.User on e.FromUserId equals us.UserId
join mer in db.Merchandise on us.MerchandiseId equals mer.MerchandiseId
where mer.MerchandiseId == grp.Key.MerchandiseId
orderby e.CreatedAt descending
select e.InboxMessage).FirstOrDefault(),
CreatedAt = (from e in db.Inbox
join us in db.User on e.FromUserId equals us.UserId
join mer in db.Merchandise on us.MerchandiseId equals mer.MerchandiseId
where mer.MerchandiseId == grp.Key.MerchandiseId
orderby e.CreatedAt descending
select e.CreatedAt).FirstOrDefault(),
}).ToList();
になります私はそれのために書く下のLINQクエリ。しかし、私はちょうどLINQで複数のON句で左結合に取り組むことができます。誰かが私を助けてくれたら大丈夫です。ありがとう!
それはLINQのは、あなたが複数の 'AND'、ない' OR'を持っているにリンクされているクエリを実行することを、重複しない@Sherlock。 – Dai
@Dai私は重複したサントシング・シングが私にはそれほどコメントしていないと言っていません:)私に心臓発作を与えてはいけません。そしてリンクは、何が起こっているのか理解できるように、私たちは手を汚す必要があります – Sherlock
@Sherlockは正しくクエリをチェックアウトしますが、私はstackoverflowで多くのソリューションを見つけることができませんし、私はちょうどここにそれを投稿したので、それは重複しません。 – jefferyleo