1
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 的不同记录。谢谢。尝试使用不同的方法,但没有成功。

4

3 回答 3

1

您可以使用GroupBy并获得第一条记录。排序后会根据 userid 获取 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)
于 2012-11-08T13:45:13.980 回答
0

这里的问题是你不想一个不同的列表,Users但你的 LINQ 查询将一些Users与多个UserGroups. 对此执行 distinct 不会因为不同而给您一个唯一的列表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);

UserGroups实际上,通过 ID 而不是名称来比较更好。

于 2012-11-08T13:49:33.243 回答
0

您可以跳过加入,因此拥有多个组的用户不会出现两次。我假设组没有导航属性,但如果有,您可以使用 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);
于 2012-11-08T13:50:35.210 回答