SQL-запрос к LINQ - PullRequest
       2

SQL-запрос к LINQ

0 голосов
/ 27 ноября 2010

Я хочу преобразовать этот запрос в LINQ для использования с Entity Framework 4.

Select *, 
(select SUM(Of_Orders.Contribution) from Of_Orders
where Of_Orders.CauseID = Of_Causes.CauseID) AS Earned
FROM Of_Causes

Может ли кто-нибудь помочь мне сделать это.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 27 ноября 2010

Охлаждается, как поле CauseID представляет внешний ключ?Если это так, то вы можете сопоставить ассоциацию в вашей модели сущности, так что cause.Orders - это свойство, к которому вы можете получить доступ.Заметьте, вы также можете переименовать сущности / свойства, они не должны совпадать с именами таблиц, чтобы вы могли избавиться от уродливых подчеркиваний!Тогда это будет выглядеть так:

var result = from c in context.Of_Causes
select new {cause, cause.Orders.Sum(o => o.Contribution}

Вы получите несколько преимуществ от этого (если сможете), например, более чистую модель и более эффективные генерируемые запросы SQL.

Если вы не можете использовать внешний ключ, я бы присоединился к таблицам вручную, что опять-таки должно повысить производительность.

Я считаю, что это выглядело бы так, но мой перевод с VB на C # может быть хитрым,C #:

var context = new ModelContainer();
var result = from c in context.Of_Cause
             join o in context.Of_Orders on c.Id equals o.CauseID into g
             select new {Cause = c, Total = g.Sum(o => o.Contribution)};

А вот оригинал VB на случай, если мой перевод выключен!

Dim result = From cause As Of_Cause In context.Of_Cause
             Group Join order As Of_Orders In context.Of_Orders On order.CauseID Equals cause.Id Into total = Sum(order.Contribution)
             Select New With {.Cause = cause, .Total = total}
1 голос
/ 27 ноября 2010

Это было бы что-то похожее на:

from cause in context.Of_Causes
select new {
    cause,
    Earned = context.Of_Orders.Where(o => o.CauseID == cause.CauseID).Sum(o => o.Contribution)
};

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...