2015-05-13 164 views
1

我可能會錯誤地解決這個問題,但我有一個預訂表和聯繫表,並且有一個聯接表連接兩個聯繫表。Linq Group By or Distinct with Join

我需要獲得與包含給定字符串的電子郵件相關聯繫的所有預訂。

換句話說,用戶希望通過聯繫電子郵件搜索預訂。

這是我想出來的。它可以工作,但會爲每個預訂返回重複的行。我一直無法弄清楚如何分組行或使用不同的方法,在T-SQL ...

if (!String.IsNullOrWhiteSpace(form["contactemail"])) 
{ 
    string contactemail = form["contactemail"]; 
    IList<int> bookingids = bookings.Select(x => x.bookingid).ToList(); 
    IQueryable<contact> con = (from y in db.bookingscontacts where bookingids.Contains(y.bookingid) select y.contact); 
    //EDIT:  I hadn't included the email filter... 
    IQueryable<contact> conmatches = (from c in con where c.email1.Contains(contactemail) select c); 
    IList<int> contactids = conmatches.Select(x => x.contactsid).ToList(); 

    bookings = (from r in bookings from c in db.bookingscontacts where contactids.Contains(c.contactsid) && bookingids.Contains(r.bookingid) select r); 
} 
+0

事實上,似乎有某種類型的初始「預訂」表,結果也被稱爲「預訂」,可能會令人困惑。 – jjj

回答

1

讓我假設你有導航屬性,否則你會開始使用它們:

var bookings = from b in bookings 
       where b.bookingscontacts 
         .Any(bc => bc.contact.email == contactemail) 
       select b; 

這將產生一個EXISTS查詢,所以預訂不重複。

+0

哦,我想我可能會離開。這是完美的 - 謝謝! – tintyethan