Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 将比较函数和值作为参数传递到实体框架_Entity Framework - Fatal编程技术网

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查询或调用数据库函数…

是的,我理解错误消息。不幸的是,将值加载到内存不是一个选项-请参阅更新的问题。。。