2010-05-13 2 views
3

S'il vous plaît ne me donne pas un exemple de travail complet, je veux savoir comment cela se fait plutôt que d'obtenir un code que je peux copier collerComment puis-je faire cette agrégat, grouper par, dans une requête dans LINQ?

Ceci est la requête que j'ai besoin, et ne peut pas pour la vie de moi le créer en LINQ.

SELECT * FROM 
dbo.Schedules s, dbo.Videos v 
WHERE s.VideoID = v.ID 
AND s.ID IN 
(
    SELECT MAX(ID) FROM dbo.Schedules 
    WHERE ChannelID = 1 
    GROUP BY VideoID 
) 
ORDER BY v.Rating DESC, s.StartTime DESC 

J'ai la « IN » requête dans LINQ je pense, c'est quelque chose comme ça

var uniqueList = from schedule in db.Schedules 
        where schedule.ChannelID == channelID 
        group schedule by schedule.VideoID into s 
        select new 
        { 
         id = s.Max(i => i.ID) 
        }; 

Il est peut-être mal, mais maintenant je ne peux pas vérifier dans une autre requête pour cela dans une clause where uniqueList.Contains(schedule.ID)

Il y a peut-être un meilleur moyen d'écrire cette requête, si vous avez une idée que j'aimerais quelques conseils. Je reçois cette erreur et cela n'a pas beaucoup de sens.

Les arguments de type pour la méthode 'System.Linq.Queryable.Contains (System.Linq.IQueryable, TSource)' ne peuvent pas être déduits de l'utilisation. Essayez de spécifier explicitement les arguments de type.

Répondre

2

essayez avec .Where (sInner => s.ID == sInner.ID) .Any().

J'ai seulement été capable d'utiliser .Contains dans des expressions linq avec des listes simples. Bien que ce que vous avez posté semble être une erreur de temps de compilation, une fois que vous le contournez, je pense que vous finirez par avoir une erreur d'exécution comme je l'ai fait dans le passé.

+0

Cela semble avoir fait l'affaire, merci pour le conseil. –

+2

Vous pouvez faire un peu plus simple: '.Any (sInner => s.ID == sInner.ID)' –