2015-06-18 52 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 –