【问题标题】:Cannot convert Generic.List<AnonymousType#1> to Generic.List<BillEF.Bill>无法将 Generic.List<AnonymousType#1> 转换为 Generic.List<BillEF.Bill>
【发布时间】:2011-09-14 14:49:46
【问题描述】:

我不确定我是否正确。我尝试选择从 LINQ 查询中返回的几个项目。最终我会想要撤回大部分信息,但有些字段是 FK ID,所以我必须从其他表中获取它们的名称值。

我现在遇到的问题是从匿名到账单的列表转换。我该如何解决这个问题?

public class BillDO
{
    /// <summary>
    /// Returns all user bills based on their UserName
    /// </summary>
    /// <param name="UserName"></param>
    /// <returns></returns>
    public List<Bill> GetBills(string UserName)
    {
        BillsEntities be = new BillsEntities();

        var q = from b in be.Bills
                where b.UserName == UserName
                orderby b.DueDate
                select new { b.DueDate, b.Name, b.PaymentAmount, b.URL };

        List<Bill> billList = q.ToList();

        return billList;
    }
}

【问题讨论】:

    标签: .net entity-framework c#-4.0 linq-to-entities


    【解决方案1】:

    我们无法确定,但我怀疑你可以这样做:

    var q = from b in be.Bills
            where b.UserName == UserName
            orderby b.DueDate
            select new { b.DueDate, b.Name, b.PaymentAmount, b.URL };
    
    return q.AsEnumerable()
            .Select(b => new Bill { DueDate = b.DueDate,
                                    Name = b.Name,
                                    PaymentAmount = b.PaymentAmount,
                                    URL = b.URL })
            .ToList();
    

    换句话说,将数据从数据库中提取为匿名类型,然后返回一个“手动创建的实体”列表,并复制相关属性。

    【讨论】:

      【解决方案2】:

      正如@Jon Skeet 所说,我们不知道Bill 是什么样子,但从上下文来看,您需要完成这项工作:

      public List<Bill> GetBills(string UserName)
      {
          BillsEntities be = new BillsEntities();
      
          return new List<Bill>(from b in be.Bills
                  where b.UserName == UserName
                  orderby b.DueDate
                  select new Bill {
                      DueDate = b.DueDate, 
                      Name = b.Name, 
                      PaymentAmount = b.PaymentAmount,
                      Url = b.URL
                  });
      }
      

      这假定您选择的属性与您的 Bill 类中的确切属性完全相同,并且不会出现任何空引用异常或错误的构造函数参数。

      【讨论】:

      • select new Bill {...} 中的项并不是Bill 的全部属性。我是实体框架的新手,我不确定我应该如何移动对象。
      • @kyle:除非您特别需要 List&lt;Bill&gt;,否则您确实应该使用 EF“表”的 IQueryable 版本。 List 实际上创造了更多的工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多