Преобразование SQL в Linq - PullRequest
0 голосов
/ 30 июля 2009

У меня есть sql, как показано ниже

SELECT Q.MaterialID AS MaterialID, Q.ProductID AS ProductID, QB.Quantity AS Quantity, 
        Q.ParameterID AS ParameterID, SUM((Q.ParameterValue * Q.Quantity)/Q.TotalTonnes) AS ParameterValue
    FROM @Quality Q
    INNER JOIN @QuantityBreakdown QB 
    ON ((Q.MaterialID = QB.MaterialID) OR (Q.MaterialID IS NULL AND QB.MaterialID IS NULL))
    AND ((Q.ProductID = QB.ProductID) OR (Q.ProductID IS NULL AND QB.ProductID IS NULL))
    GROUP BY Q.MaterialID, Q.ProductID, ParameterID, QB.Quantity

преобразование в LINQ ..... поразил ???

var enumerable = from final in (from q in qualities
                                        from qb in quantityBreakDowns
                                        where q.ProductID == qb.ProductID && q.MaterialID == qb.MaterialID
                                        select new
                                                   {
                                                       q.MaterialID,
                                                       q.ProductID,
                                                       q.ParameterID,
                                                       qb.Quantity,
                                                       ParameterValue = ((q.ProductID*q.Quantity)/q.TotalTonnes)
                                                   }
                                       )
                         group final by new
                                            {
                                                final.MaterialID,
                                                final.ProductID,
                                                final.ParameterID,
                                                ???
                                            }
                         into finalresult select finalresult;

Есть ли другой хороший способ сделать это.

Спасибо

1 Ответ

1 голос
/ 30 июля 2009

ОК решил это как:

from final in
                             (from q in qualities
                              from qb in quantityBreakDowns
                              where q.ProductID == qb.ProductID && q.MaterialID == qb.MaterialID
                              select new
                                         {
                                             q.MaterialID,
                                             q.ProductID,
                                             q.ParameterID,
                                             qb.Quantity,
                                             ParameterValue = ((q.ActualValue*q.Quantity)/q.TotalTonnes)
                                         }
                             )
                         group final by new
                                            {
                                                final.MaterialID,
                                                final.ProductID,
                                                final.ParameterID,
                                                final.Quantity
                                            }
                         into finalresult
                             select new
                                        {
                                            finalresult.Key.MaterialID,
                                            finalresult.Key.ProductID,
                                            finalresult.Key.ParameterID,
                                            finalresult.Key.Quantity,
                                            ActualValue = finalresult.Sum(fq => fq.ParameterValue)
                                        };
...