2017-07-14 111 views
2

我非常喜歡C#和LINQ,並且無法設計必要的查詢和/或代碼。我已經在這裏研究過,微軟的文檔,C#的簡介,並且學到了很多,但似乎無法正確應用它。LINQ查詢根據匹配的另一個表從一個表返回

數據源是SQL Express,5個簡單的小表。我結束了一些漸進式設計,爲自己澄清。我有MeetingDetail類型,它有一個屬性int PartnerID,它與Employees表Employee.ID - > MeetingDetail.PartnerID相關。我希望我的新類型包含基於此匹配的合作伙伴名稱的屬性。源屬性是db.Employees.LastName和FirstName,都是String類型。

var filtered = db.MeetingDetails.Where(v => v.GroupID == ID); 

var recentMeetingRowQuery = from meeting in filtered 
select new 
{ 
    Date = meeting.MeetingDate, 
    Category = meeting.Category.Name, 
    Partner = (db.Employees.Where(v => v.ID == meeting.PartnerID).Select(x => x.LastName)) 
}; 

看來這是返回合夥人屬性的錯誤類型,我試過ToString()以各種方式。

enter image description here

+1

'db.Employees.Where(v => v.ID == meeting.PartnerID)' – Fabio

+0

'v => ID == meeting.PartnerID'不使用'v'參數進行過濾 –

+0

感謝回覆@法比奧!我嘗試了Partner =表達式中的代碼,但返回類型是Employee,而我需要一個來自其屬性的字符串。我認爲。 – gnivler

回答

2

使用加入從兩個表中匹配的記錄:

var recentMeetingRowQuery = 
     from meeting in db.MeetingDetails.Where(m => m.GroupID == ID) 
     join employee in db.Employees on meeting.PartnerID equals employee.ID 
     select new { 
      Date = meeting.MeetingDate, 
      Category = meeting.Category.Name, 
      Partner = employee.LastName 
     }; 

注:我假設你正在使用員工ID進行匹配和v => ID == meeting.PartnerID實際上應該是v => v.ID == meeting.PartnerID


看來這是對合作夥伴的財產返還錯誤類型

因爲Select(x => x.LastName)回報IQueryable<string>。您可以通過添加.FirstOrDefault()僅選擇第一個匹配的員工姓名,但加入是更有效的解決方案。

+1

你的關於比較問題的說明是準確的 - 它應該是你所述的v.ID – gnivler

相關問題