Linq查询相关实体

时间:2012-09-20 07:25:06

标签: linq

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

例如:

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

的联系人
  1. 无相关角色
  2. 仅有1个相关角色
  3. 如何使用Linq

    编写此内容
    from contact in context.ContactSet
    where <contact.Roles has no records> -- ?? 
    select contact;
    

    请帮忙。

4 个答案:

答案 0 :(得分:2)

描述

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

  

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());

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

更多信息

答案 1 :(得分: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));

答案 2 :(得分: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;

答案 3 :(得分:1)

您可以使用Count() <= 1

进行检查

Linq风格:

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

方法风格:

context.ContactSet.Where(c => c.Roles.Count() <= 1);