2009-05-11 11 views
0

Wie kann die unten an LINQConversion SQL LINQ

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 

Am bis zu umgerechnet werden:

(from final in (from q in qualities 
          from qb in quantityBreakDowns 
          where q.MaterialID == qb.MaterialID && q.ProductID == qb.ProductID 
          select q) 
      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 
           //QB.Quantity AS Quantity ?? 
           //SUM((Q.ParameterValue * Q.Quantity)/Q.TotalTonnes) AS ParameterValue ?? 

          } 

'??' => wie man diese bekommt.

Ist das der richtige Weg?

Danke

Antwort

0

So etwas sollte den Trick tun. Ich nicht zu LinqToSql obwohl so müssen Sie überprüfen, wie das IQerable-Objekt zu bekommen. Ansonsten sollte dies in die richtige Richtung weisen.

var results = from q in myIQuerableObject<Quality> 
from qb on qb.MaterialId == q.MaterialId or (qb.MaterialId == null && q.MaterialId == null) 
select new {Quality = q, Breakdown = qb} 
4

Ich glaube nicht, sollten wir Ihre LINQ-Abfrage für Sie tun, sondern zeigen Sie in die richtige Richtung LINQ to SQL zu lernen.

Andernfalls ist die nächste Abfrage, die Sie haben, in der gleichen Position.

+0

Danke für den Rat. Am upto Code in meiner Frage produziert (bearbeitet) und stecken auf (??) in Code. – Sreedhar