C# 如何使用c linq在两个不同的表中获得两个不同的值

C# 如何使用c linq在两个不同的表中获得两个不同的值,c#,linq,C#,Linq,我有一个c程序,它有一个datagridview 我想使用linq在两个不同的表中获取值 我知道我可以使用sql server存储过程实现这一点 但我想在linq中完成,所以我不需要更新数据库 这是我的密码: public List<InsuranceHeader> GetInsuranceList(int InsuranceHeaderId) { var getData =(from item in context.InsuranceHeader

我有一个c程序,它有一个datagridview 我想使用linq在两个不同的表中获取值 我知道我可以使用sql server存储过程实现这一点 但我想在linq中完成,所以我不需要更新数据库

这是我的密码:

public List<InsuranceHeader> GetInsuranceList(int InsuranceHeaderId) 
{
    var getData =(from item in context.InsuranceHeader 
                  join item2 in context.InsuranceDetail
                  on item.InsuranceHeaderId equals item2.InsuranceDetailId
                  where item.InsuranceHeaderId == InsuranceHeaderId
                  select item).ToList();

    return getData;
}
另一个问题是,当我在InsuranceDetail中返回一个值时,系统会抛出一个错误 因为我知道我将我的返回类型指定为ListInsuranceHeader
要做到这一点?对不起,我的英语是

您必须为它创建一个新类,因为方法不能返回匿名类型

比如:


我还将返回一个IEnumerable,因为查询只在需要时执行。ToList将迭代所有项目。如果仅请求GetInsuranceList1.FirstOfDefault,则仅执行第一次迭代。除非您使用orderby等。

我也有同样的问题,所以我使用了上一篇文章中的解决方案。 不幸的是,我无法将其附加到GridView。 在数据绑定上:

 GridView1.DataSource = GetInsuranceList();
 GridView1.DataBind();
我得到:

直接绑定到存储查询的数据DbSet、DbQuery、DbSqlQuery是 不支持。而是用数据填充数据库集,例如 在DbSet上调用Load,然后绑定到本地数据。用于WPF绑定 到DbSet.Local。对于WinForms,绑定到DbSet.Local.ToBindingList

我在GetInsuranceList的末尾添加了ToList

public IEnumerable<InsuranceWithDetail> GetInsuranceList(int InsuranceHeaderId) 
{
    var results = (from item in context.InsuranceHeader 
                  join item2 in context.InsuranceDetail
                     on item.InsuranceHeaderId equals item2.InsuranceDetailId
                  where item.InsuranceHeaderId == InsuranceHeaderId
                  select new InsuranceWithDetail 
                  { 
                      InsuranceHeader = item, 
                      InsuranceDetail = item2 
                  }).ToList;

    return results;
}
现在我从数据绑定得到:

 GridView1.DataSource = GetInsuranceList();
 GridView1.DataBind();
GridView的数据源没有任何属性或属性 从中生成列的属性


这不是C代码。请更新sample.on item.InsuranceHeaderId=item2.InsuranceDetailId,如果您联接两个表,请使用equals。我已经编辑了代码,希望此函数返回InsuranceHeader和InsuranceDetail中的值列表。我不会将其作为列表返回,而是作为IEnumerable返回,联接明细表有什么用?仅获取包含子项的标题?选择SomeTypeitem,item2将所需属性封装为新类型感谢Jeroen您的查询非常有效,我学到了一种不同的方法非常感谢!