2010-04-19 4 views
0

Je rencontre des problèmes avec une requête LINQ to SQL obtenant la valeur min en utilisant Visual Basic. Voici le code SQL:LINQ to SQL est groupé MIN avec JOIN

SELECT RC.AssetID, MIN(RC.RecCode) AS RecCode, JA.EngineerNote from JobAssetRecCode RC 
JOIN JobAssets JA ON JA.AssetID = RC.AssetID AND JA.JobID = RC.JobID 
WHERE RC.InspState = 2 AND RC.RecCode > 0 
AND RC.JobID = @JobID 
GROUP BY RC.AssetID, JA.EngineerNote; 

Je semble être en train de tourner en rond ici avec le regroupement, etc., ne réussissant pas à le faire fonctionner. Toute aide serait grandement appréciée.

EDIT: Steven, merci pour l'aide. Converti à VB:

Dim jobResult = From asset In m_dc.JobAssets _ 
    From recCode In asset.JobAssetRecCodes _ 
    Where recCode.InspState = 2 And recCode.RecCode > 0 _ 
    And recCode.JobID = JobID _ 
    Group recCode By recCode.AssetID Into g = Group _ 
    Select New With {g.First().JobAssets.AssetID, _ 
    g.First().JobAssets.EngineerNote, _ 
    g.Select(Function(rec) rec.RecCode).Min()} 

Répondre

0

je devais désosser votre modèle de données de la requête, donc c'est un peu une supposition, mais je pense que cette requête pourrait faire l'affaire. Notez qu'il s'agit d'un C#, mais la conversion en VB devrait être assez facile:

int jobId = [some value]; 

var minRecCodes = 
    from asset in db.JobAssets 
    from recCode in asset.JobAssetRecCodes 
    where recCode.InspState == 2 && recCode.RecCode > 0 && 
     recCode.JobID == jobId 
    group recCode by recCode.AssetID into g 
    select new 
    { 
     AssetID = g.Key, 
     EngineerNote = g.First().JobAsset.EngineerNote, 
     g.Select(rec => rec.RecCode).Min() 
    };