Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于匹配另一个表从一个表返回的LINQ查询_C#_Linq - Fatal编程技术网

C# 基于匹配另一个表从一个表返回的LINQ查询

C# 基于匹配另一个表从一个表返回的LINQ查询,c#,linq,C#,Linq,我是C和LINQ的新手,无法设计必要的查询和/或代码。我在这里研究过微软文档,简而言之,我学到了很多东西,但似乎不能正确地应用它 数据源是SQLExpress,5个简单的小表。我最后用了一个渐进的设计来为自己澄清。我有一个MeetingDetail类型,它有一个属性int PartnerID,该属性与Employees表Employee.ID->MeetingDetail.PartnerID相关。我希望我的新类型包含基于此匹配的合作伙伴名称的属性。源属性为db.Employees.LastNam

我是C和LINQ的新手,无法设计必要的查询和/或代码。我在这里研究过微软文档,简而言之,我学到了很多东西,但似乎不能正确地应用它

数据源是SQLExpress,5个简单的小表。我最后用了一个渐进的设计来为自己澄清。我有一个MeetingDetail类型,它有一个属性int PartnerID,该属性与Employees表Employee.ID->MeetingDetail.PartnerID相关。我希望我的新类型包含基于此匹配的合作伙伴名称的属性。源属性为db.Employees.LastName和FirstName,均为字符串类型

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))
};
这似乎返回了错误的Partner属性类型,我尝试了各种方式来尝试

使用join匹配两个表中的记录:

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

这似乎返回了错误的合作伙伴属性类型


因为Selectx=>x.LastName返回IQueryable。您可以通过添加.FirstOrDefault只选择第一个匹配的员工姓名,但join是更有效的解决方案。

db.Employees.Wherev=>v.ID==meeting.PartnerIDv=>ID==meeting.PartnerID不使用v参数筛选回复@Fabio!我尝试了Partner=表达式中的代码,但返回类型是Employee,而我需要其属性中的字符串。我想。谢谢你@SergeyBerezovskiy。很抱歉,我不明白你的评论。你关于比较问题的说明是准确的,应该是你所说的v.ID