我有一个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)无论如何都在那里 为达到这个?对不起我的英文
答案 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的数据源没有任何属性或 从中生成列的属性