检查LINQ查询的结果是否包含值

时间:2011-04-18 01:01:40

标签: c# asp.net linq

我有一个LINQ查询,它从一个名为Permissions的表中返回所有记录,其中userId是当前用户。

我想要做的是对此结果集进行检查,看看是否存在值为5的PermissionId ..

最简单的方法是什么?

4 个答案:

答案 0 :(得分:13)

bool contains_id_5; 
contains_id_5 = Permissions.Where(p=>p.PermissionID==5).Count() > 0;
contains_id_5 = Permissions.Where(p=>p.PermissionID==5).Any();
contains_id_5 = Permissions.Where(p=>p.PermissionID==5).FirstOrDefault() != null;
contains_id_5 = Permissions.Any(p=>p.PermissionID==5);

您使用哪一个取决于您是否对中间位(计数,记录)有任何用处。 Permissions.Any(p=>p.PermissionID==5)可以是Queryable类型LINQ集合中最有效的,特别是作为更大查询的一部分,因为如果您不使用任何其他位,它可以变成SQL EXISTS调用。 / p>

答案 1 :(得分:9)

var PermissionIDFiveCount=YourInitialDataset.Where(p=>p.PermissionID==5).Count()

或更短的方式:

var PermissionIDFiveCount=YourInitialDataset.Count(p=>p.PermissionID==5)

更短:

var ContainsPermissionIDFive=YourInitialDataset.Any(p=>p.PermissionID==5)

答案 2 :(得分:2)

如果您要返回IQueryable,只需查询结果即可。

var results = repository.GetAllPermissions(id);

var result2 = from r in results where r.PermissionID == 5 select r;

bool contains5 = result2.Count() > 0;

或者你可以这样做:

var contains5 = repository.GetAllPermissions(id).Count(c => c.PermissionID == 5) > 0;

答案 3 :(得分:1)

更高级的方法可以通过如下修改Random832的代码。

bool contains_id_5; 
contains_id_5 = Permissions.Count(p=>p.PermissionID==5) > 0;
contains_id_5 = Permissions.Any(p=>p.PermissionID==5);
contains_id_5 = Permissions.FirstOrDefault(p=>p.PermissionID==5) != null;