12

上記の方法は次のとおりです。

public IList<tst> testUsers()
{
    IList<tst> testUsers = _test.GetAll().ToList();
    return test(test);
}
4

3 に答える 3

5

場所のあるユーザーを表示するには、AdsnapshotUsersという1つのクラスが必要だと思います

public class AdsnapshotUsers
{
// three fields UserId, UserLogonName, Location

}

ここで、を返す1つのメソッドを作成しますIList<AdsnapshotUsers>

 public IList<AdsnapshotUsers> GetAdsnapshotUsers()
{
List<User> Users =  GetAcitveUsers().ToList();
List<ADSnapshot> adSnapshotUsers = _adSnapshotRepository.GetAll().ToList();

     return (from u in Users  
         join ad in adSnapshotUsers on u.UserLogonName equals ad.UserLogonName 
         select new AdsnapshotUsers { 
             UserId= u.UserId, UserLogonName = u.UserLogonName, Location = ad.Location
         }
     ).ToList<AdsnapshotUsers>();
}

左外部結合を使用すると、adsnapshotテーブルにuserlogonnameが存在しない場合でも、ユーザーテーブルのすべての値が表示されます(場所の値は空白)。

 (from u in Users 
  join ad in adSnapshotUsers on u.UserLogonName equals ad.UserLogonName into aduserselect
  from ad1 in aduserselect.DefaultIfEmpty() 
  select new AdsnapshotUsers { 
      UserId= u.UserId, UserLogonName = u.UserLogonName, Location = ad1.Location
  }
 ).ToList<AdsnapshotUsers>();

ここでは、ユーザーテーブルのすべてのレコードが選択され、userlogonnameが存在する場合は場所として、ADSnapshotテーブル値で設定された場所名の値が選択されます。それ以外の場合は存在せず、デフォルトの空の値が設定されます。

于 2012-09-13T11:51:54.037 に答える
2

LINQ で 2 つの IEnumerable を結合する最も簡単な方法は、Join() を使用することです。

   var joined = from u in GetActiveUsers()
                join ad in _adSnapshotRepository.GetAll()
                    on u.UserLogonName equals ad.UserLogonName
                select new { User = u, Location = ad.Location }

もちろん、joined は匿名型の IEnumerable になりました。この情報をグリッド ビューまたはフラット オブジェクトを必要とするものに表示する場合は、各テーブルから必要なプロパティを使用して独自のクラスを作成し、代わりにそれを選択することができます。

他に注意すべき点が 2 つあります。

(1) IQueryable から IEnumerable に変換するために、常に ToList() を早めに呼び出しているようです。すべての結合とフィルタリングが完了するまで ToList() を延期することで、ほとんどのクエリを (メモリではなく) SQL で実行できます。

(2) 結合するよりも、エンティティに関連付けプロパティを設定して使用する方が望ましい場合がよくあります。

 IQueryable<User> users = ...
 var combinedInfo = users.Select(u => new { User = u, Location = u.ADSnapshot.Location })
    .ToList();
于 2012-09-13T11:39:19.487 に答える
0

これら 2 つのテーブル間に関係 (1:1) がある場合、1 つのクエリだけで非常に簡単にレコードを取得できます。レコードが 2 番目のテーブルに存在しない場合でも。

上記で定義したクラス定義を使用してデータを保存しています。

_userRepository.GetAll().Select(u=>new AdsnapshotUsers  {
         UserId= u.UserId, 
         UserLogonName = u.UserLogonName, 
         Location = u.ADSnapshot.Location
 }).ToList();
于 2012-09-14T05:15:43.797 に答える