LINQ:基于子属性修改表达式
本文关键字:属性 修改 表达式 LINQ | 更新日期: 2023-09-27 17:57:04
我有两个主要对象,"属性"和"BayOptions",它们具有"覆盖"字段。所以
BayOption.Description(string),
BayOption.DescriptionOverride (bool),以及
BayOption.DescriptionOverrideValue(string)
是设置所有字段的一个很好的例子。(数据来自内部ERP/CRM系统,销售人员可以覆盖其值。
我正在编写一个搜索,其中考虑了这些覆盖,如下所示:(另请参阅上一篇文章)
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();
我现在担心的是,如何从上面的"在这里工作"到上面的"需要在这里工作"做同样的事情。基本上,子对象。我尝试了这样的东西,但我不确定它是否正常工作。从语法上讲,这很好...无论如何,这会起作用吗?
|| x.BayOptions.Any(g => g.DescriptionOverride ? g.DescriptionOverrideValue.Contains(searchString) : g.Description.Contains(searchString))
如果我理解正确,您要检查是否存在覆盖并对其进行搜索,否则搜索原始描述。像这样的事情应该这样做:
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();