[英]How to get Unique records via LINQ
var EmpRecList = (from ur in db.Users
join ug in db.UserGroups on ur.UserGroupID equals ug.UserGroupID
select new
{
lastName = ur.LastName,
userID = ur.UserID,
firstName = ur.FirstName,
userGroupName = ug.UserGroupNameLang1
}).Where(oh => oh.userGroupName.StartsWith(userCur.UserGroupName))
.OrderBy(x => x.lastName);
我有这个代码片段。 这里的问题是,我得到2条具有相同用户ID的记录。 我希望有一个基于用户ID的不同记录。 谢谢。 尝试使用不同的方法,但没有成功。
您可以使用GroupBy并获得First记录。 订购后,它将根据用户ID获得EmpRecList中的第一条记录,但不能保证您要获得的结果。
尝试这个
var EmpRecList = (from ur in db.Users
join ug in db.UserGroups on ur.UserGroupID equals ug.UserGroupID
select new
{
lastName = ur.LastName,
userID = ur.UserID,
firstName = ur.FirstName,
userGroupName = ug.UserGroupNameLang1
})
.Where(oh => oh.userGroupName.StartsWith(userCur.UserGroupName))
.GroupBy(g => g.userID).Select(s => s.First()).ToList().OrderBy(x => x.lastName)
这里的问题是,您将不会有明确的Users
列表,但是LINQ查询UserGroups
具有多个UserGroups
某些Users
分组。 执行这一明显不会给你一个独特的名单,因为不同的UserGroups
。
您需要在where子句中解决此问题。 它需要更具体。 而不是谓词为StartsWith
,而是使用Equals
。
var EmpRecList = (from ur in db.Users
join ug in db.UserGroups on ur.UserGroupID equals ug.UserGroupID
select new
{
lastName = ur.LastName,
userID = ur.UserID,
firstName = ur.FirstName,
userGroupName = ug.UserGroupNameLang1
}).Where(oh => oh.userGroupName.Equals(userCur.UserGroupName))
.OrderBy(x => x.lastName);
实际上,最好通过ID而不是名称来比较UserGroups
。
您可以跳过加入,因此具有多个组的用户不会出现两次。 我假定组没有导航属性,但是如果存在,则可以使用ur.UserGroups,并且不需要let
定义。
var EmpRecList = (from ur in db.Users
let groups = db.UserGroups.Where(ug => ur.UserGroupID == ug.UserGroupID)
select new
{
lastName = ur.LastName,
userID = ur.UserID,
firstName = ur.FirstName,
userGroupNames = groups.Select(g => g.UserGroupNameLang1)
}).Where(oh => oh.userGroupNames.Any(n => n.StartsWith(userCur.UserGroupName)))
.OrderBy(x => x.lastName);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.