2014-09-25 3 views
1

Мне нужно преобразовать этот код в запрос linq.Как преобразовать запрос SQL Join в LINQ?

Следующий запрос дает мне исправить общее количество в MS SQL.

SELECT SUM(t1.itemPrice + t2.itemPrice) as TOTAL FROM table1 t1, table2 t2 WHERE r.userID = u.userID 

Я пытаюсь получить этот же код для работы в Linq запроса, так что я могу использовать его в моем проекте MVC4.

Моя попытка не работает в основном b/c. Я еще не очень хорошо знаком с Linq. здесь:

--Linq--

var query = (from t1 in db.table1 
      join table2 in db.table2 
      on t1.userID equals t2.userID 
      select new { SUM (t2.itemPrice + t1.itemPrice) }); 

Очевидно, что выше не работают. Может ли кто-нибудь помочь?

ответ

2

Вы очень близки. Sum() должен применяться с не-Linq синтаксисом:

var query = (from t1 in db.table1 
      join table2 in db.table2 
      on t1.userID equals t2.userID 
      select t2.itemPrice + t1.itemPrice).Sum(); 

Операция суммы все равно будет преобразована в SQL, если это возможно, как вы будете называть IQueryable.Sum().

0

Другое простое выглядящее решения:

var query = table1.Join(table2, x=>x.userID, y=>y.userID, (x,y) => (x.itemPrice + y.itemPrice)).Sum(); 
+0

Оба решения прекрасно работало. Спасибо вам обоим! – ceci

+0

OOPS ... Я просто понял, что это дает мне неправильную сумму. Поскольку запрос использует JOIN, SUM() ошибочен. Например, скажем, table1 1 строка со значением $ 60 и table2 имеет 2 строки по 1 каждый со значением 5. Вышеуказанный запрос возвращает SUM из 130 (60 + 60 + 5 + 5). Правильный ответ должен быть 70 (60 + 5 + 5). – ceci

+0

Как мы можем использовать UNION ALL? Кажется, он возвращает правильную сумму. 'select отдельный t1.itemЦена из таблицы1 t1 союз все выбрать отдельный t2.itemЦена из таблицы2 t2' – ceci

Смежные вопросы