我一直在试图创建一个LINQ语句,它将连接左外连接的两个表。LINQ左连接抛出System.NullReferenceException或System.InvalidCastException
下面的代码获取的谁已登录用户工作的人一个DataTable
(包含活动目录用户名),得到另一个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>();
Thankyou,很好地解决了InvalidCastException。并且由于该异常已修复,我尝试解决NullReferenceException异常(以检查t2是否为空)现在也能正常工作。我将编辑您的答案,以包含该修复。 – paulH 2013-03-11 17:32:51