在EF6中搜索任何数据类型文本的最有效方法是什么?

时间:2014-12-22 19:32:37

标签: sql-server entity-framework dynamic-linq

我尝试动态创建一些LINQ查询来搜索所有列中的数据。

enter image description here

目前,我使用以下代码构建动态LINQ查询。但是,在处理复杂的列时,这是非常错误的。

var type = property[col.ToLower()].PropertyType;
var isNullableType = type.IsGenericType && type.GetGenericTypeDefinition() == typeof (Nullable<>);

if (type.IsValueType && !isNullableType)
{
    filter += col + ".ToString().ToLower().Contains(@" + i + ".ToLower())";
}
else if (isNullableType)
{
    filter += col + ".HasValue ? " + col + ".Value.ToString().ToLower().Contains(@" + i + ".ToLower())" + " : false";
}
else
{
    filter += "(" + col + " != null ? " + col + " : \"\").ToString().ToLower().Contains(@" + i + ".ToLower())";
}

您是否有任何想法来简化我的上述代码?如果您的建议仅适用于SQL Server 2008或更高版本,我可以。

注意: 列数据可以是整数,字符串,对象,枚举等任何类型,也可以为null。

1 个答案:

答案 0 :(得分:-1)

如果要编写实现关键字样式搜索的实体框架查询,该搜索返回描述包含一组或全部给定关键字的行,则可以使用PredicateBuilder

从字符串读取创建动态谓词:

Using a string where clause with PredicateBuilder in LinqPad for creating dynamic where clause

LINQ and Dynamic Predicate Construction at Runtime