2015-06-18 91 views
2

我有'BayOption'子對象的'Property'對象。如果搜索條件與孩子或父母匹配,我需要網站搜索來搜索小孩BayOptions以及「屬性」並返回「屬性」。一個屬性可以有多個BayOptions(通常是這樣)。我不確定是否.Select或.SelectMany是我需要的技巧。我見到目前爲止如下:LINQ:在子實體內搜索

var stringResults = db.Properties 
       .Where(x => x.Address.Contains(id)... (more conditions here...but then BayOptions) 
       || x.BayOptions.Select(g => g.Description).Contains(id) 
       ); 

但會在這裏。選擇只能選擇一個BayOption? (我不這麼認爲,但是.SelectMany讓我感到奇怪......) 無論如何,我沒有得到這樣子對象的結果。

+2

你可以使用'Any':'|| x.BayOptions.Any(g => g.Description.Contains(id))' – cubrr

+0

這不起作用。 「不能隱式轉換'字符串'到'布爾'...」「g.Description' –

+0

我相信。任何返回布爾如果有匹配...這不是我所需要的。 –

回答

3

一種選擇是使用LINQ .Any()

var stringResults = db.Properties.Where(x => 
    x.Address.Contains(id) || 
    /* Other conditions || */ 
    x.BayOptions.Any(g => g.Description.Contains(id))); 

這裏,x.BayOptions.Any(g => g.Description.Contains(id))將返回true,如果任何BayOptions值已包含了ID的說明。

+0

返回'真'似乎並沒有幫助我......我錯過了什麼?我需要返回滿足符合id(搜索條件)的子描述要求的屬性。我試過這個,但得到了:「不能隱式地將'string'轉換爲'bool'...'''g.Description' –

+1

@Beau仔細檢查你的圓括號。 – cubrr

+0

列表 stringResults = db.Properties 。凡( X => x.Address.Contains(searchString的) || x.BayOptions.Any(G => g.Description)。載(searchString的) ).ToList( );給我一個錯誤說明無法將字符串轉換爲bool –