左外部結合で 2 つのテーブルを結合する LINQ ステートメントを作成しようとしています。
以下のコードはDataTable
、ログインしたユーザーのために働く人々の (Active Directory ユーザー名を含む) を取得しDataTable
、AD ユーザー名とアプリケーション ログイン名の間の相互参照である別のユーザーを取得し、それらを結合してアプリケーション ログイン名のList<string>
いずれかを含むを作成します。 name (存在する場合) それ以外の場合は、ログインしたユーザーのために働くすべての人の AD ユーザー名。
ログインのリストに部下のリストに誰も含まれていない場合、NullReferenceException
エラーが(行上で)発生します。select new
ログインのリストに部下のリストに含まれている人が含まれている場合、InvalidCastException
エラーが(行で)発生します。return result...
ここでの完全なエラーは次のとおりです。
System.InvalidCastException: タイプ '<>f__AnonymousType1`1[System.String]' のオブジェクトをタイプ 'System.String' にキャストできません
TMReportsDataSet.EmployeeDataTable subordinates = SessionTyped.Subordinates;
TMReportsDataSet.EmployeeLoginDataTable logins = CacheTyped.Logins;
var result = from t1 in subordinates.AsEnumerable()
join t2 in logins.AsEnumerable()
on t1.ADAccountName equals t2.ADAccountName
into joinedDT
from t2 in joinedDT.DefaultIfEmpty()
select new
{
userName = (string)(t2.LoginName ?? t1.ADAccountName)
};
return result.Cast<string>().ToList<string>();