如何使用c#linq在2个不同的表中获取2个不同的值

时间:2013-09-26 10:00:13

标签: c# linq

我有一个c#程序,它有一个datagridview 我想使用linq在2个不同的表中获取值 我知道我可以使用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中返回一个值时系统会抛出一个错误 因为我知道我将我的返回类型指定为List(InsuranceHeader)无论如何都在那里 为达到这个?对不起我的英文

2 个答案:

答案 0 :(得分:3)

您必须为其创建一个新类,因为方法无法返回 Anonymous 类型。

像:

public class InsuranceWithDetail
{
    public InsuranceHeader InsuranceHeader { get; set; }
    public InsuranceDetail InsuranceDetail { get; set; }
}

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 
                  };

    // storing the results in a variable, will help on debugging. (quick watch)
    return results;
}

此外,我将返回一个IEnumerable,因为这样查询只能按需执行。 ToList()将迭代所有项。如果您只请求GetInsuranceList(1).FirstOfDefault(),则只执行第一次次迭代。 (除非你使用orderby等。)

答案 1 :(得分:0)

我遇到了同样的问题,所以我使用了之前发布的解决方案。 不幸的是,我无法将它附加到我的GridView。 在DataBind()上:

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

  

直接将数据绑定到商店查询(DbSet,DbQuery,DbSqlQuery)   不支持。而是使用数据填充DbSet,例如   在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;
}

现在我从DataBind()获得:

  

GridView的数据源没有任何属性或   从中生成列的属性