Asp.net Linq获取单列数据计数

Asp.net Linq获取单列数据计数,asp.net,asp.net-mvc,linq,Asp.net,Asp.net Mvc,Linq,我有两个关系表。 第一个表是人员详细信息表 PersonID PersonName Sex 1 Anand Male 2 Prabhu Male 3 Durga Female 第二张桌子是一个人旅行的地方 PlaceID Place PersonID 1 a 1 2 b 2 3 c

我有两个关系表。 第一个表是人员详细信息表

PersonID    PersonName    Sex
1           Anand         Male
2           Prabhu        Male
3           Durga         Female
第二张桌子是一个人旅行的地方

PlaceID    Place   PersonID
1          a       1
2          b       2
3          c       1
4          d       3
5          e       1
6          f       2
我的预期产出是

PersonName     PLaceCount
1              3
2              2
3              1
PlaceCount
将是用户旅行地点的计数。
模型

我的代码

var data= from t1 in db.Person
          join t2 in db.PlaceTraveled on t1.PersonID equals t2.PersonID
          select new value { PersonName = t1.PersonName, PLaceCount= t2.Place};
但是我无法计算这个人去过的地方。

提前感谢

在这种情况下,您需要使用,而不是常规加入,根据:

基于键相等性关联两个序列的元素,并对结果进行分组

与常规联接不同的是,您得到一个项和一组相关项。然后可以在相关集合上应用不同的聚合,包括
Count()

如果第二个表中的
PlaceId
PersonId
的组合是唯一的,则上述内容就足够了。如果没有,则可以简单地将其与
Distinct
组合,如下所示:

var data= from t1 in db.Person
          join t2 in db.PlaceTraveled on t1.PersonID equals t2.PersonID into placeGroup
          select new value
          { 
              PersonName = t1.PersonName,
              PLaceCount = placeGroup.Select(p => p.PlaceId).Distinct().Count()
          };

在这种情况下,您需要使用,而不是使用常规联接,根据:

基于键相等性关联两个序列的元素,并对结果进行分组

与常规联接不同的是,您得到一个项和一组相关项。然后可以在相关集合上应用不同的聚合,包括
Count()

如果第二个表中的
PlaceId
PersonId
的组合是唯一的,则上述内容就足够了。如果没有,则可以简单地将其与
Distinct
组合,如下所示:

var data= from t1 in db.Person
          join t2 in db.PlaceTraveled on t1.PersonID equals t2.PersonID into placeGroup
          select new value
          { 
              PersonName = t1.PersonName,
              PLaceCount = placeGroup.Select(p => p.PlaceId).Distinct().Count()
          };

我认为应该是这样的:

我认为应该是这样的:

你只是在你的查询中合并了两个表,你在哪里写了计数代码?在连接之后,做一个
组,这应该会给你想要的。你只是在你的查询中合并了两个表,你在哪里写了计数代码?在连接之后,做一个
组,这应该会给你想要的。你能再解释一下吗?你能解释一下吗更多
var data= from t1 in db.Person
          join t2 in db.PlaceTraveled on t1.PersonID equals t2.PersonID into placeGroup
          select new value
          { 
              PersonName = t1.PersonName,
              PLaceCount = placeGroup.Select(p => p.PlaceId).Distinct().Count()
          };