Создать метод расширения, который можно использовать в запросе EF?C#

Место общения программистов C#
Ответить
Гость
 Создать метод расширения, который можно использовать в запросе EF?

Сообщение Гость »


У меня есть запрос, который выглядит примерно так.

var железнодорожные вагоны = DbContext.Railcars .Select(r => новый { Номер = r.НомерВагона, Количество = вагон.InboundQuantity - dbContext.Transfers .Where(t => t.FromType == TransferType.Вагон && t.FromId == Вагон.Id) .Sum(t => t.Количество) + dbContext.Переносы .Where(t => t.ToType == TransferType.Вагон && t.ToId == Вагон.Id) .Sum(t => t.Количество) } Расчет Quantity немного запутан, и я буду использовать его во многих местах. Поэтому я хотел немного упростить этот синтаксис. Что мне действительно хотелось бы сделать, так это создать метод расширения, чтобы мое выражение могло выглядеть примерно так.

var железнодорожные вагоны = DbContext.Railcars .Select(r => новый { Номер = r.НомерВагона, Количество = вагон.GetCurrentQuantity() } Но я не могу понять правильный синтаксис. Ближе всего к построению выражения, которое можно было бы использовать в запросе, я подошел следующим образом. Но это не метод расширения, поскольку здесь нет параметра this. И я не понимаю, как включить это в запрос. Например, как передать Вагон?

публичный статический класс TransloadingExtensions { public static Expression GetCurrentQuantity(ApplicationDbContext dbContext) { вернуть вагон => вагон.InboundQuantity - dbContext.Transfers .Where(t => t.FromType == TransferType.Вагон && t.FromId == Вагон.Id) .Sum(t => t.Количество) + dbContext.Переносы .Where(t => t.ToType == TransferType.Вагон && t.ToId == Вагон.Id) .Sum(t => t.Quantity); } } Я знаю, что методы расширения, такие как Where() и Select(), работают в запросах, но они работают и с IQueryable. Здесь мне действительно нужно выражение в моем предложении Select().

Кто-нибудь знает, как сделать этот метод расширения, который можно включить в мой запрос? Возможно ли это вообще?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»