2017-07-31 48 views
0

我如何結合這兩個?如何結合LINQ和Lambda?

var viewModel2 = tu.SingleOrDefault(su => su.email == logindetails.Email); 




//Get jobs and personal details 
var viewModel = from u in db.badusers 
          join r in db.Users on u.email equals r.Email 
          join j in db.roles on u.id equals j.roleid 
          where r.UserName.Equals(usernameCookie) 
          select new JoinedModel { roles = u, jobs = j, users = r}; 

我的選擇應該在哪裏?

備註: JoinedModel包含多個模型。如果我嘗試返回viewModel2數據是正確的,但它是一個視圖與多個模型,因此爲什麼我必須使用ViewModel(JoinedModel),所以拋出的錯誤是標準'我期望JoinedModel(viewModel),但你傳遞給我viewModel2'。

+3

我們需要更多的細節。什麼類型是'tu'?你的預期結果是什麼?你已經嘗試了什麼? – GalacticCowboy

+0

我已添加更多詳細信息。 –

+1

仍然不清楚'viewmodel2'應該在哪裏使用。你想要返回兩個對象嗎?返回類型是一個元組,還是'JoinedModel'有一個構造函數接受這兩個對象? –

回答

0

您可以創建一個匿名對象,但我強烈建議選擇更具描述性的項目名稱:

var combinedModel = new { 
    viewModel2 = tu.SingleOrDefault(su => su.email == logindetails.Email), 
    viewModel = from u in db.badusers 
       join r in db.Users on u.email equals r.Email 
       join j in db.roles on u.id equals j.roleid 
       where r.UserName.Equals(usernameCookie) 
       select new JoinedModel { roles = u, jobs = j, users = r} 
}; 

這將創建一個對象combinedModel,具有兩個屬性:combinedModel.viewModel2combinedModel.viewModel

+0

這可能會工作,如果調整,現在它給我:在System.Core.dll中發生類型'System.InvalidOperationException'的異常,但未在用戶代碼中處理 附加信息:序列包含多個匹配元素 –

+0

啓用我的try catch來查看是否有任何SQL甚至被返回。 –

+1

「Sequence包含多個匹配元素」的錯誤可能是由'SingleOrDefault()'調用引起的。它發現多個項目在使用'SingleOrDefault()'時是非法的,它基本上意味着「給我存在的單個項目,如果沒有找到,則返回null,或者如果超過1個項目,則拋出異常。如果您不關心多個現有項目,並且您只想要其中的任何一個,您可以嘗試'FirstOrDefault()'。 –