2009-07-30 11 views
0

Ich habe SQL wie untenSQL zu Linq Conversion

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 

Umstellung auf LINQ ..... schlug an ???

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; 

Gibt es einen anderen guten Weg, dies zu tun.

Dank

Antwort

1

Ok löste dies als:

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) 
             };