Linq获得单列数据计数

时间:2016-05-17 09:06:51

标签: 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       1
4          d       3
5          e       1
6          f       2

我的预期输出是

PersonName     PLaceCount
1              3
2              2
3              1

PlaceCount将是用户旅行地点的计数 模型

public class value
{
    public string PersonName{get;set;}
    public int PLaceCount{get;set;}
}

我的代码

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};
但是我不能得到这个人旅行的地方的数量 提前致谢

2 个答案:

答案 0 :(得分:2)

在这种情况下,您需要使用group join而不是常规联接,而documentation根据Print page numbers

  

根据关键相等性关联两个序列的元素,将结果分组

与常规联接的区别在于您获得了相关项目的项目和设置。然后,您可以在相关集上应用不同的聚合,包括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.Count() };

如果第二个表格中PlaceIdPersonId的组合是唯一的,则上述内容就足够了。如果没有,那么你可以简单地将它与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()
          };

答案 1 :(得分:0)

我认为它应该是这样的: tracing