在层之间传递对象时遇到问题

时间:2011-09-23 19:57:11

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

我正在尝试做一些应该非常简单的事情但是我遇到错误我不知道如何纠正。而且,我甚至不知道我是否以“正确”的方式做事。

我有3个实体。我的第一个实体叫Bill,这是我的主要实体。另外两个是重复和类型。 Bill具有指向其各自主键的外键(即TypeId)。 Type和Repeat都类似。他们有自己的ID和描述。

我正在尝试使用EF和LINQ to Entity:使用Bill的所有属性获取所有账单,但不是TypeId,我想要TypeDesc。

这是一个包含3个项目的N层解决方案 到目前为止,我有我的数据层,我称之为模型,业务层我称之为BLL,我的演示文稿稍后我称之为GUI。

namespace BillApp.Model
{
public class BillModel
{
    public List<BillType> GetAllBills()
    {
        using (BillsEntities be = new BillsEntities())
        {
            var results = from o in be.Bills
                         .Include("Type")
                         .Include("Repeat")
                          select new
                          {
                              BillId = o.BillId,
                              Name = o.Name,
                              URL = o.URL,
                              PaymentAmount = o.PaymentAmount,
                              Balance = o.Balance,
                              DueDate = o.DueDate,
                              TypeDesc = o.Type.TypeDesc,
                              RepeatDesc = o.Repeat.RepeatDesc,
                              Username = o.UserName 
                          };

           return results.ToList();
        }
    }
  }
  public class BillType
  {
    #region Properties
    public int BillId { get; set; }
    public string Name { get; set; }
    public string URL { get; set; }
    public decimal PaymentAmount { get; set; }
    public decimal Balance { get; set; }
    public DateTime DueDate { get; set; }
    public string TypeDesc { get; set; }
    public string RepeatDesc { get; set; }
    public string Username { get; set; }
    #endregion
  }    
}

结果返回错误无法将类型System.Linq.IQueryable<AnonymousType#1>隐式转换为System.Collections.Generic.List<BillApp.Model.BillType>

接下来,我尝试使用此代码将对象传递给我的BLL。

namespace BillApp.BLL
{
public class BillBLL
{
    public List<BillType> GetAllBills()
    {
        BillModel b = new BillModel();

        return b.GetAllBills();
    }
}
}

但BillType有一个错误:找不到类型或命名空间名称'BillType'(您是否缺少using指令或程序集引用?)

我错过了什么?我能做得更好吗?

1 个答案:

答案 0 :(得分:3)

我认为错误消息非常明确:results类型为IQueryable<T>,您尝试返回List<T>。要改为返回列表,可以使用ToList方法。您还需要创建BillType实例而不是匿名对象,以使其符合List<BillType>返回类型。您的GetAllBills方法如下所示:

public List<BillType> GetAllBills()
{
    using (BillsEntities be = new BillsEntities())
    {
        var results = from o in be.Bills
                     .Include("Type")
                     .Include("Repeat")
                      select new BillType
                      {
                          BillId = o.BillId,
                          Name = o.Name,
                          URL = o.URL,
                          PaymentAmount = o.PaymentAmount,
                          Balance = o.Balance,
                          DueDate = o.DueDate,
                          TypeDesc = o.Type.TypeDesc,
                          RepeatDesc = o.Repeat.RepeatDesc,
                          Username = o.UserName 
                      };

       return results.ToList();
    }
}

对于第二个错误,您可能只是缺少一个using指令来访问位于不同命名空间中的BillType类型。你在文件的顶部有这一行:

using BillApp.Model;