1

这可能是一个非常基本的问题,但我没有太多使用 Linq,所以需要帮助。我想根据相关记录计数检索记录列表。

例如:

我有一个与“角色”实体具有 1:N 关系的联系实体。我想选择有

  1. 没有相关角色
  2. 只有 1 个相关角色

我如何使用 Linq 编写这个

from contact in context.ContactSet
where <contact.Roles has no records> -- ?? 
select contact;

请帮忙。

4

4 回答 4

2

描述

您可以使用Count()orAny()方法

Count() - 返回序列中元素的数量。

Any() - 确定序列的任何元素是否满足条件。

样本

数数()

查询语法

from contact in context.ContactSet
where contact.Roles.Count() == 0
select contact;

方法语法

context.ContactSet.Where(c=> c.Roles.Count() != 0));

任何()

查询语法

from contact in context.ContactSet
where !contact.Roles.Any()
select contact;

方法语法

context.ContactSet.Where(c=> !c.Roles.Any());

方法和查询语法之间的性能没有差异,两者都将编译成相同的。

更多信息

于 2012-09-20T07:27:08.777 回答
1

选择没有角色的联系人:

from contact in context.ContactSet
where !contact.Roles.Any()
select contact;

或者简单地说:

context.ContactSet.Where(c=> !c.Roles.Any());

选择分配了 n 个角色的联系人:

from contact in context.ContactSet
where contact.Roles.Count()==n
select contact;

或者简单地说:

context.ContactSet.Where(c=> c.Roles.Count()==n));
于 2012-09-20T07:27:09.250 回答
1

以下将选择Roles集合中恰好有 0 或 1 个项目的所有联系人。根据收集的类型和数据访问技术,Count财产可以通过一种方法,例如Count()。(Count也有重载,所以你可以有条件地计算项目,例如.Count(x => x.SomeProperty && !x.SomeOtherProperty)

from contact in context.ContactSet
where contact.Roles.Count <= 1
select contact;
于 2012-09-20T07:27:44.163 回答
1

您可以使用检查Count() <= 1

林克风格:

from contact in context.ContactSet
where contact.Roles.Count() <= 1
select contact;

方法风格:

context.ContactSet.Where(c => c.Roles.Count() <= 1);
于 2012-09-20T07:27:54.340 回答