2014-01-07 82 views
0

目前,我有以下代碼:搜索並選擇倍數,其中LINQ/Lambda表達式

var FirstNameList = db.Clients.Include(x => x.FirstNames).Include(x => x.Addresses).SelectMany(a => a.FirstNames).Where(x => x.Name.ToLower().Trim() == "Max".ToLower().Trim()).ToList(); 

我有FirstNames和地址我要的結果包括的導航屬性。

我使用SelectMany語句,因爲它對我來說是唯一有效的。有點。它返回名稱等於Max的所有FirstNames。

我希望它做的是返回表FirstNames中具有屬性Name等於Max的所有客戶端。

另一種方式,我想這樣做是從FirstNameList中返回所有的ID,然後通過查詢FirstNameList的數據來返回客戶端,但我會查詢數據庫兩次,這似乎效率低下。

我的問題是有可能的,我該如何去查詢數據庫以返回我的客戶端,如果是這樣?

親切的問候

+1

您是否試圖獲取姓名和地址馬克斯?你的問題不完全清楚? –

回答

0

下面的查詢應該給你你要找的。你可以查看每個客戶的FirstNames,看看它們中的任何一個是否被命名爲「max」。 (在這種情況下,由於「max」是您輸入的常量,我從中刪除了ToLower()。Trim())

var clientsNamedMax = db.Clients.Include(x => x.FirstNames).Include(x => x.Addresses).Where(x => x.FirstNames.Any(y => y.Name.ToLower().Trim() == "max")).ToList();