我一直在試圖創建一個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