2011-09-23 53 views
0

我试图做一些应该是真正简单的事情,但我得到的错误我不知道如何纠正。另外,我甚至不知道我是否以“正确”的方式做事。有问题在各层之间传递对象

我有3个实体。我的第一个实体叫做比尔,这是我的主要实体。另外两个是重复和类型。 Bill具有指向其各自主键的外键(即TypeId)。 “类型”和“重复”类似。他们有他们的Id和描述。

我试图用EF和LINQ to实体做:获取所有的账单与比尔的所有属性,但代替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指令或程序集引用?)

我缺少什么?我能做些什么更好?

回答

3

我认为错误信息非常明确: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; 
+1

对不起,我在工作时脱掉了.ToList()。添加它不会更改错误消息。另外,我有一个使用BillApp.Model语句,它在参考中。 – kyle

+0

另外,'select new {}'代码创建一个匿名类型的对象。应该是'选择新的BillType {}'。 – Jacob

+0

@Jacob,我也发现了这个错误,我相应地编辑了我的答案。 –