Я новичок в LINQ, я только начинаю понимать его синтаксис, но все же решил использовать приложение Linqer для преобразования моих операторов SQL в операторы LINQ. Однако запросы LINQ не дают одинакового результата.Linqer SQL to LINQ conversion - Различные результаты
Вот мой SQL-запрос:
SELECT ISNULL(SUM(linehaul + accessorial), 0) FROM costs
WHERE
ordnumber = 19374911
Он преобразует в этот LINQ:
From Costs In
(From Costs In db.Costs
Where
CLng(Costs.ordnumber) = 19374911
Select
Column1 = CType((Costs.linehaul + Costs.accessorial),Decimal?),
ordnumber = Costs.ordnumber,
linehaul = Costs.linehaul,
accessorial = Costs.accessorial,
Dummy = "x"
)
Group Costs By Costs.Dummy Into g = Group
Select New With {
.Column1 = If(CType(g.Sum(Function(p) p.linehaul + p.accessorial),Decimal?) Is Nothing,0,g.Sum(Function(p) p.linehaul + p.accessorial))
}
Я не могу сказать, что я понимаю, это преобразование 100%, но это не главное. Если у меня есть затраты на данный порядковый номер, то результаты будут согласованы, но если затраты не будут найдены для заданного ordnumber, LINQ возвращает пустой набор результатов вместо того, чтобы возвращать значение по умолчанию «0», как это делает мой SQL.
Что мне нужно добавить в LINQ, чтобы он возвращал ноль вместо пустого результата?
Это запрос выглядит более сложным, чем нужно. – Mansfield
@Mansfield - я абсолютно согласен, он фактически выбрал все остальные поля из этой таблицы, которые я вручную удалил. Не уверен, что я понимаю, зачем нам это фиктивное поле и группировка. Как только я научусь писать LINQ вручную, я уверен, что смогу выполнить это в более простом запросе. В этот момент я бы хотел получить 0, если записи о расходах не найдены для данного заказа. –
Вы используете linq для sql? Или структура сущности? – Mansfield