LINQ查询根据匹配的另一个表从一个表返回

问题描述:

我非常喜欢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

使用加入从两个表中匹配的记录:

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