C# linq中的连接子句
我已经创建了三个表的名称:emps、emp_项目、emp_位置 现在我想从每个表中选择一列,但当我执行join query时,到目前为止出现以下错误: join子句中某个表达式的类型不正确。 调用“GroupJoin”时类型推断失败 我正在执行的查询是:C# linq中的连接子句,c#,linq,join,C#,Linq,Join,我已经创建了三个表的名称:emps、emp_项目、emp_位置 现在我想从每个表中选择一列,但当我执行join query时,到目前为止出现以下错误: join子句中某个表达式的类型不正确。 调用“GroupJoin”时类型推断失败 我正在执行的查询是: from e in Emp_info from p in Emp_projects join l in Emp_locations on new { e.User_id , p.Project_id } equals new { l.
from e in Emp_info
from p in Emp_projects
join l in Emp_locations
on new { e.User_id , p.Project_id } equals new { l.User_id, l.Project_id } into detail
from l in detail
select new
{
e.Middlename,
p.Project_name,
l.Location
};
query.Dump("Join query");
不知道是哪个子句导致了错误 我的猜测是,它试图比较的两个匿名类型并不相同,这也确保了属性是相同的数据类型 改变
on new { e.User_id , p.Project_id } equals new { l.User_id, l.Project_id } into detail
到
这对我有用
void Main()
{
var Emp_info = new List<Info>
{
new Info {Middlename = "Middlename",User_id = "1"}
};
var Emp_projects = new List<Project>
{
new Project{Project_id = "1",Project_name = "Project"}
};
var Emp_locations = new List<LocationInfo>
{
new LocationInfo{Location = "Location",Project_id="1",User_id = "1"}
};
/* your code */
var query = from e in Emp_info
from p in Emp_projects
join l in Emp_locations
on new { e.User_id , p.Project_id } equals new { l.User_id, l.Project_id } into detail
from l in detail
select new
{
e.Middlename,
p.Project_name,
l.Location
};
query.Dump("Join query");
/* your code */
}
class Info
{
public string User_id;
public string Middlename;
}
class Project
{
public string Project_id;
public string Project_name;
}
class LocationInfo
{
public string User_id;
public string Project_id;
public string Location;
}
到目前为止,我已经找到了这个解决方案,一次使用多个连接。 不知道这是不是正确的做法
var query=
from e in Emp_info
join l in Emp_locations on e.User_id equals l.User_id // first join
join p in Emp_projects on l.Location_id equals p.Project_id // second join
select new
{
Name= e.Middlename,
Project = p.Project_name,
Location = l.Location
};
query.Dump();
终于得到了答案。。这是完美的工作,因为我想要的
var query=
from e in db.emp_info
from p in db.emp_projects
join l in db.emp_locations
on new { username= e.User_id ,project_id=p.project_id } equals new { username=l.User_id,project_id= l.Project_id } into detail
from l in detail
select new
{
e,p,l
};
foreach (var q in query)
{
Console.WriteLine("{0} has done project like {1} in {2}",q.e.Middlename,q.p.project_name,q.l.location);
}
Console.ReadLine();
}
Console.ReadLine();
可能重复一些如何重复,但我问的是我有三个表而不是两个…我认为linq一次只能连接两个表是错误的吗?我尝试了复制,在我的案例说明中效果很好,没有涉及db,只列出我面临的第一个问题是attributes属性不同,下一个问题是我没有对任何列名使用任何变量将其与另一列匹配。i、 e.userid和l.user\u id的e usrname。。。我希望你现在能理解。
var query=
from e in db.emp_info
from p in db.emp_projects
join l in db.emp_locations
on new { username= e.User_id ,project_id=p.project_id } equals new { username=l.User_id,project_id= l.Project_id } into detail
from l in detail
select new
{
e,p,l
};
foreach (var q in query)
{
Console.WriteLine("{0} has done project like {1} in {2}",q.e.Middlename,q.p.project_name,q.l.location);
}
Console.ReadLine();
}
Console.ReadLine();