0

質問があります:

// 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 の作成方法

4

2 に答える 2

1

私はそれが次のようになると信じています:

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 ...
于 2013-07-19T06:17:27.170 に答える