написать метод Get In в репозитории - PullRequest
0 голосов
/ 09 января 2012

Я начинаю в шаблоне репозитория в EntityFreamework в бизнес-слое

У меня есть методы Get *

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 есть Поле1 и Поле 2
  • В таблице 2 есть Поле 3 иField4.

Я хочу, чтобы слой Bussiness Table1 Get метод записал следующее

Field1 ,Field2,Field1+Field3,Field2+Field4

спасибо

1 Ответ

4 голосов
/ 09 января 2012

Я не согласен с комментарием Тони Хопкинсона. Вы не должны добавлять свойство только для чтения к вашему классу Contact, поскольку такое свойство нельзя использовать в LINQ to Entities и, следовательно, не подходит для методов, которые возвращают IQueryable. * 1005. *

Вместо этого сделайте что-то вроде:

    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
               };
    }

Приятно то, что вы можете дополнительно составить запрос:

var q = MyBusinessLayer.GetSums().OrderBy(c => c.Fields1and3).Take(5);

... и все это делается в SQL.

...