繁体   English   中英

如何通过LINQ获取唯一记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM