1

我有一个 ac# 程序,它有一个 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) 无论如何可以实现这一点?对不起我的英语不好

4

2 回答 2

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 等)

于 2013-09-26T10:08:58.857 回答
0

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

 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 的数据源没有用于生成列的任何属性或属性

于 2013-09-26T11:42:55.210 回答