在存储库模式中编写Get方法

时间:2012-01-09 11:40:14

标签: c# entity-framework repository repository-pattern

我是商业层中EntityFreamework的存储库模式的首发

我有方法

public IQueryable<Contract> GetAll()
{
    var repository = new ContractsRepository(this.Context);
    return repository.GetAll();
}

public IQueryable<Contract> GetAll(Func<Contract, bool> predicate)
{
    var repository = new ContractsRepository(this.Context);
    return repository.GetAll(predicate);
}

这些都很好,但是我想在函数返回值时对字段进行计算吗?

例如,我有2个表表1和表2

  • 表1具有Field1和Field 2
  • 表2包含Field3和Field4。

我想要Bussiness图层Table1 Get方法来编写以下内容

Field1 ,Field2,Field1+Field3,Field2+Field4

感谢

1 个答案:

答案 0 :(得分:4)

我不同意Tony Hopkinson的评论。 不应该Contact类添加只读属性,因为这样的属性不能在LINQ to Entities中使用,因此不适合返回{{1 }}

相反,做一些事情:

IQueryable

关于这一点的好处是你可以进一步撰写查询:

    public IQueryable<ContractSumsModel> GetSums()
    {
        var repository = new ContractsRepository(this.Context);
        return from c in repository.GetAll()
               select new ContractSumsModel
               {
                   Field1 = c.Field1,
                   Field2 = c.Field2,
                   Fields1and3 = Field1 + Field3,
                   Fields2and4 = Field2 + Field4
               };
    }

......整个过程都是在SQL中完成的。