主要问题是,当列名为字符串且值为字符串且我们不知道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解决方案,那将是最好的。
答案 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");