2015-04-22 114 views
1

下面的代碼正在工作,但是如果它無法根據where子句找到具有「Domain Administrator」的條目,它將完全忽略關於該特定內容的任何其他內容結果。這導致我缺少項目,因爲我生成的視圖可能沒有「域管理員」條目。我明白這是因爲它是一個明確的位置,但我不太清楚如何正確表示我需要做的事情。我懷疑我需要做一個左連接,但不知道這是如何影響導航屬性。任何指導正確的方向將不勝感激。沿線的具有實體框架的C#Lambda - 即使不匹配也會返回結果

var endpointConstructor = db.tbl_equipment.Include(t => t.tbl_Backup_Configuration) 
    .Where(e => e.tbl_Backup_Configuration.FirstOrDefault().BackupType == null) 
    .Where(e => e.tbl_customer.Calc_Contract_Status == true && e.Calc_Contract_Status == true && e.Equip_type.Contains("server")).OrderBy(e => e.tbl_customer.Priority) 
    .Where(what => what.tbl_customer.tbl_user_pass_list.FirstOrDefault().Usage1 == "Domain Administrator") 
    .Select(s => new CompanyServerUserPassViewModel { Comp_ID = s.Comp_ID, ServerName = s.NetBIOS_name, AdminUsername = s.tbl_customer.tbl_user_pass_list.FirstOrDefault().Username, 
    AdminPassword = s.tbl_customer.tbl_user_pass_list.FirstOrDefault().Password, Company = s.Company, TeamviewerID = s.tbl_computerinfo.FirstOrDefault().teamviewerID }); 
+0

'FirstOrDefault()Password'作爲一個方面說明,你明白什麼是「默認」這裏是的,如果你要求的屬性會拋出。 ? –

+0

是的 - 我會假設它不存在時會拋出null? – Trinitrotoluene

回答

0

東西:

.Where(what => [statement that evaluates to true if there is no domain admin] 
|| what.tbl_customer.tbl_user_pass_list.First().Usage1 == "Domain Administrator") 
+0

難道這不是簡單地評估一切,從而渲染線條毫無意義嗎? 如果我實際上刪除了域管理員的.Where子句,它將返回我需要的所有內容,但是對於域管理員不存在的項目,它將使用列表中另一種類型的用戶名/密碼填充我的視圖。我想要做的是返回值,如果他們是域管理員類型,但返回null,如果沒有任何類型的域管理員。 – Trinitrotoluene

+0

「,但如果它無法根據where子句找到具有」域管理員「的條目,它將完全忽略關於該特定結果的任何其他內容」我以爲你希望它在沒有域管理員的情況下返回值。 –

+0

對不起,如果我不清楚,說我有一個名爲Contoso Ltd的公司和一個名爲SERVER1的服務器名稱。如果在Domain Administrator中tbl_user_pass中有條目,我的代碼就可以正常工作,並返回結果集中的所有內容,一切正常。如果它沒有域管理員,則它會完全從結果集中發出Contoso Ltd和Servername。現在,Contoso Ltd可能會在tbl_user_pass中輸入打印機的條目。如果我實現您的代碼,它將返回Contoso Ltd,SERVER1,PrinterUsername,PrinterPassword。我真正想要返回的是Contoso Ltd,SERVER1,null,null。 – Trinitrotoluene

相關問題