2009-08-12 63 views
3

我有一個查詢在使用匿名類型時可以正常工作,但只要我試圖對其匿名化,就無法將所有值選擇到類中。無法使用linq選擇類

這裏是我使用(聯合亞音速3)LINQ:與此類

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(); 

組合:

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; } 
} 

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(); 

當我將其更改爲

它不會給我一個錯誤,但類中的所有值都是0,除了QuotePremies.ID,QuotePremies.ShortDesc和Quo tePremies.LongDesc。不知道爲什麼會發生。

+0

我沒有亞音速3任何經驗,但我要說,這是一個錯誤...... – Thorarin 2009-08-12 21:55:07

+0

你能在不同的應用程序bug重現,在較短的方式? – 2009-08-13 00:08:07

+1

'x.premie'是什麼類型? – SLaks 2009-08-13 03:03:25

回答

1

看看是否使用轉換有助於

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

不行,不起作用。 – 2009-08-12 21:54:24

+0

如果您使用匿名類型,是否正確設置了PrijsAlgemeen的值? – shahkalpesh 2009-08-12 22:05:32

+0

是的,它被正確設置。 – 2009-08-12 22:13:39

0

我相信問題與鑄件做。爲什麼不爲IEnumberable編寫和擴展方法,它將採用此查詢結果並返回List的集合。它可能是這個樣子:

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; 
    } 
} 

感謝kek444幫助我類似的問題