2012-02-17 5 views
2

J'ai une requête SQL d'une vue. Cette vueUtilisation de la fonction MIN dans LINQ

SELECT 
    [ID] 
    [Name], 
    [Category], 
    MIN(OrderDate) as OrderDate, 
    MIN(DeliveryDate) as DeliveryDate 
GROUP BY 
    [ID], [Name], [Category] 
FROM 
    [OrdersView] 

Je sais que cette requête est correcte parce que mon DBA me l'a donné. Mais j'ai besoin de le convertir en LINQ. À l'heure actuelle, je donne les résultats suivants:

var orders = from o in dataContext.OrdersView 
      group o by new { o.ID, o.Name, o.Category } into grouping 
      select new Order() { 
       ID = grouping.Key.ID, 
       Name = grouping.Key.Name, 
       Category = grouping.Key.Category, 
       OrderDate = ?, 
       DeliveryDate = ? 
      }; 

Mon problème est que je ne sais pas comment exécuter la fonction MIN sur la OrderDate et DeliveryDate et utiliser ces valeurs dans ma requête LINQ. Malheureusement, je ne peux pas changer la base de données parce qu'elle est verrouillée. Quelqu'un peut-il me diriger dans la bonne direction?

Merci!

Répondre

3

OrderDate = grouping.Min(a => a.OrderDate)

DeliveryDate = grouping.Min(a => a.DeliveryDate)

Edit: Utilisé o au lieu de grouping accidentellement. Cela devrait le faire pour vous.

+0

Vous avez peut-être tout à fait raison puisque je ne peux pas tester maintenant, mais cela tient-il compte du groupement? –

+0

Oui; Je suppose ici que les lignes que j'ai fournies seront branchées dans le code indiqué où se trouvent les points d'interrogation. – eouw0o83hf

+0

Vous avez raison. J'ai mal lu la question. – ken

1
var orders = from o in dataContext.OrdersView 
     group o by new { o.ID, o.Name, o.Category } into grouping 
     let orderDate = grouping.Min(order => order.OrderDate) 
     let deliveryDate = grouping.Min(order => order.DeliveryDate) 
     select new Order() { 
      ID = grouping.Key.ID, 
      Name = grouping.Key.Name, 
      Category = grouping.Key.Category, 
      OrderDate = orderDate, 
      DeliveryDate = deliveryDate 
     }; 

À l'avenir, je vous recommande d'utiliser LINQPad pour tester vos requêtes. Cela permet d'afficher le code SQL généré.