Я задал вопрос здесь об ошибке Linq, которая возникает в результате смешивания Linq-To-SQL с кодом C #. Вкратце, компилятор запутывается и не понимает, что вы собираетесь вызывать локальную функцию для набора результатов после того, как вернется из базы данных.
Ответ, который я принял, состоял в том, чтобы использовать AsEnumerable()
в наборе результатов, что вынудило его вернуть все столбцы перед дальнейшими вычислениями.
Моя проблема сейчас заключается в том, что очень похожим образом я сейчас пытаюсь вызвать метод объекта, который связан с моим набором результатов, через внешний ключ, например ::
.
var q =
from c in MyCities.AsEnumerable() // note the AsEnumerable, forcing the query to execute before accessing properties of c
let cy = c.County
select new { CityName = c.Name, CountyName = cy.Name, CountyFoo = cy.Foo() };
И угадайте, что - это снова вызывает это старое исключение. Зачем? Очевидно, потому что нам нужно снова вернуться к базе данных, чтобы загрузить соответствующие County
из c
. Только на этот раз я не могу позвонить AsEnumerable()
, потому что c
имеет только один округ, а не коллекцию!
Это был дурацкий болтун!
Как мне обойти это?