Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/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
C# 存在和包含之间的LINQTO实体差异_C#_Linq To Entities - Fatal编程技术网

C# 存在和包含之间的LINQTO实体差异

C# 存在和包含之间的LINQTO实体差异,c#,linq-to-entities,C#,Linq To Entities,使用存在而不是包含 var s = new int[] { 1, 2, 3, 4, 5 }; dbset.where(x => s.contains(x.id); 或 是List的方法,在数组或IEnumerable扩展上没有这种方法 使用此方法的正确语法是x=>s.Exists(y=>y==x.id)(您应该传递谓词,即返回布尔值的方法) 区别在于-包含Linq to实体支持的,存在不受支持 Exists()不存在。不存在这样的方法。为了澄清这一点,List公开了该方法。你的s是一个数

使用
存在
而不是
包含

var s = new int[] { 1, 2, 3, 4, 5 };
dbset.where(x => s.contains(x.id);

  • List
    的方法,在数组或
    IEnumerable
    扩展上没有这种方法
  • 使用此方法的正确语法是
    x=>s.Exists(y=>y==x.id)
    (您应该传递谓词,即返回布尔值的方法)
  • 区别在于-
    包含Linq to实体支持的
    存在
    不受支持

  • Exists()
    不存在。不存在这样的方法。为了澄清这一点,
    List
    公开了该方法。你的
    s
    是一个数组,而不是一个列表。+1,你在解释这两种方法之间的差异方面比我做得好得多。但是你能描述一下传递原始值和谓词之间的差异吗?我只是认为这对于理解这两种方法之间的关键区别是至关重要的(因为EF支持
    Any
    ,而不是
    Exists
    ,所以这不像是一个大问题\区别)@IlyaIvanov抱歉,没有让你明白:)谓词是Exists方法签名的一部分,传递原始值和谓词之间的区别很简单—您可以使用谓词调用此方法,或者您的代码不编译。例如,您可以在谓词中捕获局部变量并在谓词中访问它,从而为比较创建更灵活的条件。无论如何,让我们把它留给自学吧。说到语法,你的答案完全正确:)
    var s = new int[] { 1, 2, 3, 4, 5 };
    dbset.Where(x => s.Exists(y => x.id));