EF转换varchar中的nullable var

时间:2014-07-17 13:22:49

标签: c# sql-server entity-framework linq-to-entities

主要问题是,当列名为字符串且值为字符串且我们不知道DB中列的类型时,如何使用LinqToEntities过滤存储库?

经过多次调查,我发现无法翻译

db.entities.Where(x=>x.GetType().GetProperty(columnName).GetValue(x).ToString().Contains("a string"))

进入

select *
from table
where cast(columnName as varchar) like '%a string%'

因为.ToString()与LinqToEntities不兼容,它与LinqToObject完全兼容。

可能的旁路可以构建一个存储过程来完成这项工作,但如果有一个EF解决方案,那将是最好的。

1 个答案:

答案 0 :(得分:0)

我认为Linq Dynamic应该可以解决问题:

// Select string properties
var columns = typeof(Entity).GetProperties().Where(prop => prop.PropertyType == typeof(string)).Select(c => c.Name + " == @0");
// Aggregate
var queryString = string.Join(" || ", columns);
// Query with Linq Dynamic
var query = db.Entities.Where(queryString, "MyString");