[英]How I can use array.contains in entity framework by c#?
I need to Use array.contains method with two parameter that one off them is int?. 我需要使用带有两个参数的array.contains方法,其中一个参数是int?。 how can i use?
我该如何使用?
string[] role = Roles.GetRolesForUser(Membership.GetUser().UserName)
.ToArray();
int[] ProcessId = biz.Context.tblRoleProcess
.Where(x => (role.Contains(x.Role) ||
role.Contains("Administrators")) &&
x.Measure == true)
.Select(x => x.ProcessId).ToArray();
return GetQuery(filterExpression, Columns)
.Where(x => ProcessId.Contains(
{x.ProcessID,x.ParentProcessID}))
.OrderBy<Models.tblProcess>(sortExpression)
.Skip(startRowIndex)
.Take(maximumRows);
Try this: 尝试这个:
return GetQuery(filterExpression, Columns)
.Where(x => ProcessId.Contains(x.ProcessID)
|| ProcessId.Contains(x.ParentProcessID))
.OrderBy<Models.tblProcess>(sortExpression)
.Skip(startRowIndex)
.Take(maximumRows);
UPDATE 更新
You can define the ProcessId
as int?[]
or more better as IEnumerable<int?>
您可以将
ProcessId
定义为int?[]
或更佳的IEnumerable<int?>
IEnumerable<int?> ProcessId = biz.Context.tblRoleProcess
...
.Select(x => (int?)x.ProcessId);
or change where as: 或更改为:
.Where(x => ProcessId.Contains(x.ProcessID)
|| x.ParentProcessID.HasValue
? ProcessId.Contains(x.ParentProcessID)
: false);
Contains
is not a method defined above array, but above IEnumerable<T>
. Contains
不是在数组上IEnumerable<T>
的方法,而是在IEnumerable<T>
上IEnumerable<T>
的方法。 It has two overloads and is well documented on MSDN . 它有两个重载,并且在MSDN上有详细记录。
First overload (the one you are using) accepts Integer and uses default comparer, that means, two equal integers are 第一个重载(您正在使用的重载)接受Integer并使用默认比较器,这意味着两个相等的整数是
The other overload is with adding a IEqualityComparer instance, which is not really useful in this case. 另一个重载是添加IEqualityComparer实例,在这种情况下,它实际上没有用。
The most optimal way to use here is not via contains, but via Any
- you may use Contains
as suggested in other answers, but that will be less effective: 此处使用的最佳方法不是通过包含,而是通过
Any
-您可以按照其他答案中的建议使用Contains
,但是效果较差:
return GetQuery(filterExpression, Columns)
.Where(x => ProcessId.Any(processIdItem => processIdItem == x.ProcessID || processIdItem == x.ParentProcessId ))
.OrderBy<Models.tblProcess>(sortExpression)
.Skip(startRowIndex)
.Take(maximumRows);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.