Создать метод расширения, который можно использовать в запросе EF? ⇐ 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().
Кто-нибудь знает, как сделать этот метод расширения, который можно включить в мой запрос? Возможно ли это вообще?
У меня есть запрос, который выглядит примерно так.
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().
Кто-нибудь знает, как сделать этот метод расширения, который можно включить в мой запрос? Возможно ли это вообще?
Мобильная версия