Member 10779942 Ответов: 2

Как я могу преобразовать этот SQL-запрос с помощью агрегатной функции в эквивалент linq


Это мой sql-запрос:
Select Product.ProductName, Sum(Credit) - Sum(Debit) as TotalBalance 
from Acct_GL inner join Product ON Acct_GL.AcctRef = Product.ProductCode 
where AccountId = @custaid AND CONVERT(Date,effdate,103) <= CONVERT(Date,@todate,103) AND (Reverse = 'N')
Group by Product.ProductName


Это мой запрос Linq:
var TotalAccountBalance = (from pro in _db.Products
                join gl in _db.Acct_GL
                    on pro.ProductCode.Trim() equals (gl.AcctRef.Trim())
                where gl.AccountID == CustId && gl.EffDate &lt;= FromDate && 
gl.Reverse == "N"
                group pro by pro.ProductName into pd
                orderby pd.Key
                select new AccountBalanceModel()
                {
                    Total = Convert.ToDecimal(gl.Credit) - Convert.ToDecimal(gl.Debit)
                }).FirstOrDefault();

Maciej Los

И... Что не так с вашим запросом Linq? Пожалуйста, предоставьте более подробную информацию о вашей проблеме...

Member 10779942

Большое спасибо Мацей Лос. Это прекрасно работает.

Maciej Los

Всегда пожалуйста.
Можете ли вы принять мой ответ как решение (зеленая кнопка) - формально удалить ваш вопрос из списка без ответа?

Member 10779942

Может кто-то пожалуйста, помогите мне? Я пытаюсь преобразовать вышеприведенный sql в эквивалентный ему запрос linq.

2 Ответов

Рейтинг:
6

Member 10779942

ВАР TotalAccountBalance =

(от pro в _db. Products

присоединяйтесь GL в _db.Acct_GL на Pro.Код продукта равна гл.AcctRef

где гл.Методами accountid == CustId &амп;&амп; гл.EffDate &ЛТ;= FromDate и усилитель; & гл.Обратная ==

"Северный"
группа Про про.Марка в ПД

выберите new AccountBalanceModel()

{

Марка = ПД.ключ,

Итого = (десятичное число)ПД.Сумма(х=>У Х.Кредит) - (десятичная)ПД.Сумма(х=>У Х.Дебет)

}).Список();


Maciej Los

Пожалуйста, соблюдайте правила и не дублируйте существующие решения!

Рейтинг:
12

Maciej Los

Похоже, вы на правильном пути...
Разница:

var TotalAccountBalance = (from pro in _db.Products
                join gl in _db.Acct_GL on pro.ProductCode equals gl.AcctRef
                where gl.AccountID == CustId && gl.EffDate <= FromDate && gl.Reverse == "N"
                group pro by pro.ProductName into pd
                select new AccountBalanceModel()
                {
                    ProductName = pro.ProductName,
                    Total = Convert.ToDecimal(gl.Credit) - Convert.ToDecimal(gl.Debit)
                }).ToList();