我一直在尝试创建一个 LINQ 语句,它将使用左外连接连接两个表。
下面的代码获取DataTable
为登录用户工作的人员(包含 Active Directory 用户名),获取另一个DataTable
是 AD 用户名和应用程序登录名之间的交叉引用,然后加入他们以创建一个List<string>
包含应用程序登录名的名称(如果存在)其他为登录用户工作的每个人的 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>();