LINQ:根据子属性修改表达式

时间:2015-06-18 19:01:38

标签: c# linq

我有两个主要对象,'属性'和' BayOptions'有'覆盖'领域。所以,

BayOption.Description(string),

BayOption.DescriptionOverride(bool)和

BayOption.DescriptionOverrideValue(string)

是如何设置所有字段的一个很好的例子。 (数据来自内部ERP / CRM系统,销售人员可以覆盖其中的值。)

我正在编写一个考虑了这些覆盖的搜索:(Also, see previous article

List<Property> stringResults = db.Properties
                .Where(
                       x => x.Address.Contains(searchString)
                    ...
Works HERE-->   || (x.DescriptionOverride ? x.DescriptionOverrideValue.Contains(searchString) : x.Description.Contains(searchString))
                    ...
                    // bayoptions TODO: flesh these out more...
Need work here-->   || x.BayOptions.Any(g => g.Description.Contains(searchString))                       
                    ).ToList();

我现在担心的是如何从&#39; Works HERE&#39;以上到需要在这里工作&#39;以上。基本上,孩子对象。 我试过这样的事情,但我不确定它是否正常。从句法上来说它很好......无论如何,这会起作用吗?:

|| x.BayOptions.Any(g => g.DescriptionOverride ? g.DescriptionOverrideValue.Contains(searchString) : g.Description.Contains(searchString))

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你想检查是否有覆盖并搜索,否则搜索原始描述。这样的事情应该这样做:

List<Property> stringResults = db.Properties
                .Where(
                       x => x.Address.Contains(searchString)
|| (x.DescriptionOverride && x.DescriptionOverrideValue.Contains(searchString))

|| x.BayOptions.Any(g => g.Description.Contains(searchString))                       
                    ).ToList();