上記の方法は次のとおりです。
public IList<tst> testUsers()
{
IList<tst> testUsers = _test.GetAll().ToList();
return test(test);
}
上記の方法は次のとおりです。
public IList<tst> testUsers()
{
IList<tst> testUsers = _test.GetAll().ToList();
return test(test);
}
場所のあるユーザーを表示するには、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テーブル値で設定された場所名の値が選択されます。それ以外の場合は存在せず、デフォルトの空の値が設定されます。
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();
これら 2 つのテーブル間に関係 (1:1) がある場合、1 つのクエリだけで非常に簡単にレコードを取得できます。レコードが 2 番目のテーブルに存在しない場合でも。
上記で定義したクラス定義を使用してデータを保存しています。
_userRepository.GetAll().Select(u=>new AdsnapshotUsers {
UserId= u.UserId,
UserLogonName = u.UserLogonName,
Location = u.ADSnapshot.Location
}).ToList();