Как вернуть новый объект конкретного типа, используя LINQ / Linq2E? - PullRequest
0 голосов
/ 04 сентября 2011

У меня есть следующий оператор выбора, который выглядит синтаксически правильным:

 var accounts = from i in db.IRSBASEFLs
                           join vr in db.VSARules on i.VSACode equals vr.VSACode into rules
                           from rule in rules.DefaultIfEmpty()
                           select new ImporterAccount(i, rule, RuleType.Liquidity);

Однако, это выдает:

Only parameterless constructors and initializers are supported in LINQ to Entities.

Я попытался добавить класс "строитель", чтобы вернутьновый ImporterAccount, но это тоже не сработало, на этот раз с:

LINQ to Entities does not recognize the method 'IrsalDAL.ImporterAccount CreateImporterAccount(IrsalDAL.IRSBASEFL, IrsalDAL.VSARule, IrsalUtilities.RuleType)' method, and this method cannot be translated into a store expression.

Мне нужно выполнить вычисления, в идеале в конструкторе, поэтому я немного запутался, как добиться этого?

Почему это вызывает исключение L2E, когда класс не является частью моей модели сущности?

Как я могу вернуть новый объект и выполнить для него вычисления?

1 Ответ

0 голосов
/ 04 сентября 2011

Не уверен, что решение вашей проблемы, но вы можете обойти это как так:

var tempAccounts = from i in db.IRSBASEFLs
                   join vr in db.VSARules on i.VSACode equals vr.VSACode into rules
                   from rule in rules.DefaultIfEmpty()
                   select new { VarI = i, Rule = rule, Liquidity = RuleType.Liquidity};

var accounts = tempAccounts.Select(x => new ImporterAccount(x.VarI, x.rule, x.Liquidity));

Надеюсь, это поможет:)

Редактировать 1: Относительно «ошибки закрытия существующей программы чтения данных», Поиск Google возвращает много результатов , причем первым является SO вопрос . Принятый ответ:

Речь идет не о закрытии соединения. EF правильно управляет подключением. Мое понимание этой проблемы состоит в том, что есть несколько данных команды поиска, выполняемые по одному соединению (или одной команде с несколькими вариантами выбора), в то время как следующий DataReader выполняется перед первым один закончил чтение. Единственный способ избежать исключения разрешить несколько вложенных DataReaders = включить MultipleActiveResultSets. Другой сценарий, когда это всегда происходит, когда вы перебираете результат запроса (IQueryable) и вы вызвать отложенную загрузку загруженного объекта внутри итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...