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);

私はこのコードスニペットを持っています。ここでの問題は、同じユーザー ID を持つ 2 つのレコードを取得していることです。ユーザー ID に基づいて個別のレコードを作成したいと考えています。ありがとう。個別の方法を使用してみましたが、成功しませんでした。

4

3 に答える 3

1

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)
于 2012-11-08T13:45:13.980 に答える
0

ここでの問題は、個別のリストを作成したくないがUsers、LINQ クエリがいくつかUsersを複数のUserGroups. これに対して個別を実行しても、異なるため、一意のリストは得られません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

参加をスキップできるため、複数のグループを持つユーザーが 2 回表示されることはありません。グループへのナビゲーション プロパティはないと仮定しましたが、ある場合は 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 に答える