2010-11-23 30 views
5

下面是我用來建立LINQ語句原型的SQL。代碼中的GUID是List<GUID>。我嘗試了3個小時,只是不明白。能夠在睡眠中編寫LINQ的某種唯一的人幫助我。帶連接和列表的LINQ <GUID>

SELECT DISTINCT [id] 
     ,[emailAddress] 
     ,[name] 
     ,[emailRunNumber] 
    FROM [emailAddress] 
    join promotionsJoin 
    on promotionsJoin.EmailAddressId = emailAddress.id 
    where promotionsJoin.promotionId in ('09464b57-f3d7-41ec-b0b1-cbc5999824bd', 
    '8bc855b2-2f01-4083-b43a-dab7b7a81ac8') AND emailRunNumber is NULL 

回答

0

這個in運算符不被linq-to-entities支持,但是你可以這樣做。

var result = YourObjectContext.EmailAddress 
       .Where(ea => ea.emailRunNumber == null 
       && (ea.PromotionJoin.promotionId == new Guid("09464b57-f3d7-41ec-b0b1-cbc5999824bd") || 
        ea.PromotionJoin.promotionId == new Guid("8bc855b2-2f01-4083-b43a-dab7b7a81ac8")); 

稱爲EmailAddress會自動有一個字段的EF生成的類名爲PromotionJoin前提是你PromotionJoin表有外鍵引用的EmailAddress主鍵。

+0

@abatischev,糟糕,忘了改變從複印時 題。 – 2010-11-23 13:55:58

+0

克勞斯,對不起,我沒有在我原來的帖子中清楚..我有一個列表在代碼中,但原型在SQL中,但我認爲使用PromotionJoin的線索將幫助我。 (今天是假期,我明天將在LINQPad上工作,併發布我的發現) – 2010-11-25 12:05:30

1
(from emailAddress in emailAddresses 
join promotion in promotions 
    on emailAddress.id equals promotion.EmailAddressId 
where guidsList.Contains(promotion.promotionId) 
    && promotion.emailRunNumber == null 
select new { 
    emailAddress.id, 
    emailAddress.emailAddress, 
    promotion.name, 
    promotion.emailRunNumber 
}).Distinct() 

的參加者將是不必要的,如果已經有一個在你映射的兩個表之間的關係(當時promotion將只是關閉的emailAddress場)

+0

這看起來很接近...促銷沒有emailAddressId,但有Klaus指出的PromotionJoin。 (今天是個假期......明天我會在LINQPad上工作,發佈我的發現)謝謝bdukes! – 2010-11-25 12:04:07

0

擴展@Klaus'回答:

var result = YourObjectContext.EmailAddress 
    .Where(ea => 
     ea.emailRunNumber == null && 
     new[] 
     { 
      new Guid("09464b57-f3d7-41ec-b0b1-cbc5999824bd"), 
      new Guid("8bc855b2-2f01-4083-b43a-dab7b7a81ac8" 
     }.Contains(ea.PromotionJoin.promotionId)) 
    .Distinct(); 

var result = YourObjectContext.EmailAddress 
    .Where(ea => 
     ea.emailRunNumber == null && 
     new[] 
     { 
      "09464b57-f3d7-41ec-b0b1-cbc5999824bd", 
      "8bc855b2-2f01-4083-b43a-dab7b7a81ac8" 
     }.Select(s => new Guid(s)).Contains(ea.PromotionJoin.promotionId)); 
    .Distinct();