Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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/8/linq/3.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# 使用linqkit'时出错;带表达式方法的谓词_C#_Linq_Dynamics Crm 2011_Linqkit - Fatal编程技术网

C# 使用linqkit'时出错;带表达式方法的谓词

C# 使用linqkit'时出错;带表达式方法的谓词,c#,linq,dynamics-crm-2011,linqkit,C#,Linq,Dynamics Crm 2011,Linqkit,一点背景: 我使用的是不支持某些操作的Linq提供程序(,但实际上并不重要)。 具体来说,它不支持表达式中的Contains()。 意思-类似的东西不起作用:var users=DataContext.users.Where(user=>userIds.Contains(user.Id)) 因为它使用的是的谓词,所以我将使用user.Id==userIds[0]|| user.Id==userIds[1]…|而不是userIds.Contains(…)user.Id==userid[100] 为

一点背景:
我使用的是不支持某些操作的Linq提供程序(,但实际上并不重要)。
具体来说,它不支持表达式中的
Contains()

意思-类似的东西不起作用:
var users=DataContext.users.Where(user=>userIds.Contains(user.Id))

因为它使用的是的谓词,所以我将使用
user.Id==userIds[0]|| user.Id==userIds[1]…|而不是
userIds.Contains(…)
user.Id==userid[100]

为此,我定义了以下函数,它接受任意集合和任意表达式,并对它们应用“Or”:

private IQueryable<TCrmEntity> FilterByCollection<TCrmEntity, T>(IQueryable<TCrmEntity> entities, IEnumerable<T> collection, Expression<Func<TCrmEntity, T, bool>> filterFunction)
    {
      var predicate = PredicateBuilder.False<TCrmEntity>();
      predicate = collection.Aggregate(predicate, (current, collectionElement) => current.Or(entity => filterFunction.Invoke(entity,collectionElement)));

      var query = entities.AsExpandable()
        .Where(predicate);

      return query;
    }
专用IQueryable筛选器ByCollection(IQueryable实体、IEnumerable集合、表达式筛选器函数)
{
var predicate=PredicateBuilder.False();
谓词=collection.Aggregate(谓词,(current,collectionElement)=>current.Or(entity=>filterFunction.Invoke(entity,collectionElement));
var query=entities.AsExpandable()
.Where(谓语);
返回查询;
}
这样,我可以使用任何类型的集合和任何类型的表达式。
例如,请查看此测试运行(使用内存中的用户集合):
var res=FilterByCollection(users.AsQueryable(),rolesList,(account,role)=>account.role==role)
,以查找具有给定角色之一的所有用户

但是,在运行上面的示例时,我遇到了以下异常-
变量“entity”,类型为“User”,从作用域“”引用,但它没有定义

有什么想法吗

另外,我不确定这是否相关,但当我实际使用Crm数据上下文而不是内存中的集合时,我没有收到此错误:/