C# linq中的连接子句

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.

我已经创建了三个表的名称: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.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();