2009-08-12 6 views
3

J'ai une requête qui fonctionne bien lorsque j'utilise un type anonyme mais dès que j'essaie de l'anonymiser, il ne parvient pas à sélectionner toutes les valeurs dans la classe.ne peut pas sélectionner dans la classe en utilisant linq

ici est le LINQ j'utilise (en combinaison avec Subsonic 3):

var producten = (from p in Premy.All() 
    join pr in Producten.All() on p.dekking equals pr.ID 
    where p.kilometragemax >= 10000 && 
      p.CCmin < 3000 && 
      p.CCmax >= 3000 && 
      p.leeftijdmax >= DateTime.Today.Subtract(car.datumEersteToelating).TotalDays/365 
    group p by new { pr.ID, pr.Naam, pr.ShortDesc, pr.LongDesc } into d 
    select new 
    { 
     ID = d.Key.ID, 
     Dekking = d.Key.Naam, 
     ShortDesc = d.Key.ShortDesc, 
     LongDesc = d.Key.LongDesc, 
     PrijsAlgemeen = d.Min(x => x.premie), 
     PrijsAlgemeenMaand = d.Min(x => x.premie), 
     PrijsMerkdealerMaand = d.Min(x => x.premie), 
     PrijsMerkdealer = d.Min(x => x.premie) 
    }).ToList(); 

Quand je change à:

List<QuotePremies> producten = (from p in Premy.All() 
    join pr in Producten.All() on p.dekking equals pr.ID 
    where p.kilometragemax >= 10000 && 
      p.CCmin < 3000 && 
      p.CCmax >= 3000 && 
      p.leeftijdmax >= DateTime.Today.Subtract(car.datumEersteToelating).TotalDays/365 
    group p by new { pr.ID, pr.Naam, pr.ShortDesc, pr.LongDesc } into d 
    select new QuotePremies 
    { 
     ID = d.Key.ID, 
     Dekking = d.Key.Naam, 
     ShortDesc = d.Key.ShortDesc, 
     LongDesc = d.Key.LongDesc, 
     PrijsAlgemeen = d.Min(x => x.premie), 
     PrijsAlgemeenMaand = d.Min(x => x.premie), 
     PrijsMerkdealerMaand = d.Min(x => x.premie), 
     PrijsMerkdealer = d.Min(x => x.premie) 
    }).ToList(); 

en combinaison avec cette classe:

public class QuotePremies 
{ 
    public byte ID { get; set; } 
    public string Dekking { get; set; } 
    public string ShortDesc { get; set; } 

    public string LongDesc { get; set; } 
    public decimal PrijsAlgemeen { get; set; } 
    public decimal PrijsAlgemeenMaand { get; set; } 
    public decimal PrijsMerkdealer { get; set; } 
    public decimal PrijsMerkdealerMaand { get; set; } 
} 

il ne me donne pas une erreur, mais toutes les valeurs de la classe sont 0 à l'exception de QuotePremies.ID, QuotePremies.ShortDesc et Quo tePremies.LongDesc. Aucune idée pourquoi cela arrive.

+0

Je n'ai aucune expérience avec SubSonic 3, mais je dirais que c'est un bug ... – Thorarin

+0

Pouvez-vous reproduire le bug plus rapidement dans une application différente? –

+1

Quel type est 'x.premie'? – SLaks

Répondre

1

Voir si vous utilisez la conversion aide

PrijsAlgemeen = Convert.ToDecimal(d.Min(x => x.premie)) 
+0

non, ne fonctionne pas. –

+0

La valeur de PrijsAlgemeen est-elle correctement définie si vous utilisez un type anonyme? – shahkalpesh

+0

oui c'est réglé correctement. –

0

Je crois que le problème a à voir avec la coulée. Pourquoi ne pas écrire et méthode d'extension pour IEnumberable qui prendrait ce résultat de la requête et retournerait une collection de List. Il pourrait ressembler à ceci:

public static class Extensions 
{ 
    // extends IEnumerable to allow conversion to a custom type 
    public static TCollection ToMyCustomCollection<TCollection, T>(this IEnumerable<T> ienum) 
      where TCollection : IList<T>, new() 
    { 
     // create our new custom type to populate and return 
     TCollection collection = new TCollection(); 

     // iterate over the enumeration 
     foreach (var item in ienum) 
     { 
      // add to our collection 
      collection.Add((T)item); 
     } 

     return collection; 
    } 
} 

Merci à kek444 pour me aider avec un problème similaire

Questions connexes