C# C Linq:添加另一个连接条件
我有一个问题:C# C Linq:添加另一个连接条件,c#,sql,linq,C#,Sql,Linq,我有一个问题: // Query: gets recipients that have not been sent yet.... var query = (from rec in ent.Recipients join ch in ent.CampaignHistories on rec.RecipientID equals ch.RecipientID into chl from x in chl.DefaultIfEmpty().Where(xx => !xx.RecipientI
// Query: gets recipients that have not been sent yet....
var query = (from rec in ent.Recipients
join ch in ent.CampaignHistories on rec.RecipientID equals ch.RecipientID
into chl
from x in chl.DefaultIfEmpty().Where(xx => !xx.RecipientID.HasValue)
select new BRecipient()
{
Email = rec.Email,
Name = rec.Name,
RecipientID = rec.RecipientID
}).Take(remaining);
这将基本上在SQL中执行左连接,相当于:
Select * FROM Recipients AS R LEFT OUTER JOIN
CampaignHistory AS H ON R.RecipientID = H.RecipientID
WHERE (H.RecipientID IS NULL)
我想要的是:
Select * FROM Recipients AS R LEFT OUTER JOIN
CampaignHistory AS H ON R.RecipientID = H.RecipientID
AND H.CampaignID <> 21
WHERE (H.RecipientID IS NULL)
如何创建LINQ?我相信它会是:
join ch in ent.CampaignHistories.Where(x=>x.CampaignID != 21)
on rec.RecipientID equals ch.RecipientID
但老实说,我不明白你想做什么。你为什么不干脆做:
from rec in ent.Recipients
where !ent.CampaignHistories
.Any(x=>x.RecipientID == rec.RecipientID && x.CampaignID != 21)
select ...
和H.CampaignID 21请将DefaultIfEmpty放在where条件之后。我已更新了我的代码段。请尝试一下,如果有任何问题,请告诉我。
var query = (from rec in ent.Recipients
join ch in ent.CampaignHistories.Where(xx => !xx.RecipientID.HasValue && xx.CampaignID != 21) on rec.RecipientID equals ch.RecipientID
into chl
from x in chl.DefaultIfEmpty()
select new BRecipient()
{
Email = rec.Email,
Name = rec.Name,
RecipientID = rec.RecipientID
}).Take(remaining);