在层之间传递对象时有问题
本文关键字:对象 有问题 之间 | 更新日期: 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指令或程序集引用?)
我错过了什么?我能做得更好吗?
我认为错误信息非常清楚: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;