简体   繁体   English

我如何使用C#在实体框架中使用array.contains?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM