1

使用 Entity Framework 4.3 和 Linq,我想将搜索字符串与包含对象的某些属性以及子对象的属性进行匹配。事实证明这是一个相当复杂的查询,我不知道该怎么做。例如,一个属性是一个整数,我不允许在 Linq 查询中调用 .ToString() 。

为了让您了解我正在尝试做什么,请考虑以下示例代码:

var dbVersions = from ver in db.Versions 
                 where ver.Name.Contains(search) || 
                       ver.Children.Any(c=>c.Id.ToString().Contains(search)) 
                 select ver;

我应该如何实现这个搜索?也许通过存储过程?

数据库服务器是 SQL Server 2012。

4

2 回答 2

5

如果你想使用 LINQ,框架会在内部进行适当的优化,根据我的经验,结果还不错。如果您不想使用存储过程并坚持使用 LINQ 将其全部保存在您的类代码中,请使用:

SqlFunctions.StringConvert((double)c.Id)

用于将您的 int 转换为字符串。请注意,int 没有重载,因此您需要将其转换为 double 或 decimal。

于 2012-05-24T10:25:11.233 回答
1

在您的情况下,我建议使用存储过程。

如果您最终传递了一个将用于多个列的搜索词,那么您最好编写一个存储过程。我曾经尝试过类似于您正在做的事情,最终结果是非常混乱的 LINQ 语句,让我感觉很脏 :)

很好的参考:

实体框架不支持 x.ToString() !

以下是如何将存储过程与 EF 一起使用的示例:

http://blogs.msdn.com/b/bindeshv/archive/2008/11/20/using-stored-procedures-in-entity-framework.aspx

请记住在“从数据库更新模型”时添加存储过程。

于 2012-05-24T10:09:24.213 回答