【发布时间】:2013-12-12 20:27:59
【问题描述】:
我正在使用 EF5 有一个由字符串、日期、可为空的日期和整数组成的 20 个大型属性实体。是否可以使用 Linq 对每个字段进行包含。
我不想为每个字段都构建一个 linq 语句
results = list.Where(house => house.Date1.ToString().Contains(search)||
house.Address1.Contains(search)||
house.Address2.Contains(search)||
house.Address3.Contains(search)||
.........................)
我想我想将所有属性转换为字符串(在必要时),然后对它们中的每一个进行包含?理想情况下,这将发生在数据库级别。
我想我不能将它们连接起来,因为如果两个字段的结尾和开头创建了搜索文本,这可能会导致错误匹配?有什么想法吗?
更新
我目前是 LINQ string[] against multiple fields 的第二个答案,使用 LinqKit AsExpandable 和 EF 转换函数到基于类型的字符串。但是我似乎无法找到将 DateTime 转换为字符串的 SqlFunction
【问题讨论】:
-
在每个字段上使用相同的搜索字符串对我来说看起来真的很糟糕。
-
我同意。但是,客户希望从单个文本框中搜索数据中的所有字段。不过,目前这是一个概念证明
-
@ScottChamberlain 这本质上是一个全文搜索。作为有意义的业务需求。但不确定 EF 是否是完成这项工作的最佳工具。
-
@Servy 我就是这个意思,就是不知道怎么说。
-
看来您应该创建一个存储 Id + Body 的新表,其中 body 是您需要搜索的字段的串联,然后在 Body 上添加全文索引
标签: c# linq entity-framework entity-framework-5