在层之间传递对象时有问题

本文关键字:对象 有问题 之间 | 更新日期: 2023-09-27 18:09:35

我想做的事情应该是真正简单的,但我得到的错误,我不知道如何纠正。而且,我甚至不知道我做事情的方式是否"正确"。

我有三个实体。我的第一个实体叫Bill,它是我的主要实体。另外两个是重复和类型。Bill有外键(即TypeId),它们指向各自的主键。Type和Repeat是相似的。他们有他们的Id和描述。

我想用EF和LINQ对实体做什么:获取所有具有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指令或程序集引用?)

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

在层之间传递对象时有问题

我认为错误信息非常清楚:resultsIQueryable<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;