Entity framework 将比较函数和值作为参数传递到实体框架
这是问题的后续行动 我想将一个比较函数和一个值传递到查询实体框架的搜索函数中。比较函数必须根据值对不同的属性进行操作。例如,我的数据是Entity framework 将比较函数和值作为参数传递到实体框架,entity-framework,Entity Framework,这是问题的后续行动 我想将一个比较函数和一个值传递到查询实体框架的搜索函数中。比较函数必须根据值对不同的属性进行操作。例如,我的数据是 class DataItem { [Key] public int ID { get; set; } public bool Active { get; set; } public string Prop1 { get; set; } public string Prop2 { get; set; } } 我需要一个上下文方法 public
class DataItem
{
[Key]
public int ID { get; set; }
public bool Active { get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
我需要一个上下文方法
public List<DataItem> SearchValue(Func<string, string, bool> op, string value)
{
if (value.Length < 10)
return DataItem.Where(di => di.Active && op(di.Prop1, value)).ToList();
else
return DataItem.Where(di => di.Active && op(di.Prop2, value)).ToList();
}
然后我就可以这样打电话了
List<DataItem> list = context.SearchValue((s1, s2) => s1 == s2, "A");
这里我还需要不同的比较函数,都是规范的
程序编译正常,但在运行时,我得到一个提示,LINQ表达式节点类型“Invoke”在LINQ to实体中不受支持。错误
将数据项加载到内存中不是一个选项,因为我将有大约10亿个数据项。这就是我寻找服务器端解决方案的原因。我使用的所有操作都是规范的,因此可以将它们转换为SQL查询。我的问题是:如何将它们作为参数传递?此问题意味着您的LINQ查询无法转换为用于后端执行的正确SQL查询。所有LINQ to SQL或实体框架查询都转换为在后端运行的SQL,如果它们有一些无法转换为SQL的操作,则可能会出现此错误来吧
我认为您应该首先使用.ToList或.AsEnumerable将数据放入内存,然后对其使用'Op'操作。这应该可以解决问题。不幸的是,您不能使用LinqToEntities。您必须手动创建sql查询或调用数据库函数…是的,我理解错误消息。不幸的是,将值加载到内存不是一个选项-请参阅更新的问题。。。