我有两个关系表。 第一张表是人员详细信息表
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};
但是我不能得到这个人旅行的地方的数量
提前致谢
答案 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() };
如果第二个表格中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()
};
答案 1 :(得分:0)
我认为它应该是这样的: tracing