2015-07-13 2 views
1

Я пытаюсь получить некоторую информацию сформировать таблицу следующим образом:Подсчет количества записей для определенного условия с помощью LINQ

//Fish table: fishid(int32), SpeciesName(nvarchar(50)),age(int?), weight(int?) 

(from f in Fish 
    where f.SpeciesName=="COD" || f.SpeciesName=="Salmon" 
    select f 
).GroupBy(g=>g.SpeciesName) 
    .Select(s= > new 
    { 
     Species=s.Key, 
     Age= (from age_count in Fish where age_count.SpeciesName== s.key && age_count.age!=null select age_count).Count(), 
     Weight= (from Weight_count in Fish where Weight_count.SpeciesName== s.key && Weight_count.Weight!=null select weight_count).Count() 
    }; 

Теперь, в то время как это работает, я имею в виду, должно быть лучше способ сделать это. Может кто-нибудь предложить лучший код?

Благодаря

+0

если количество рыб, имеющих возраст и вес, вы считаете, это выглядит довольно хорошо – Thorarins

ответ

5

Это должно сделать то же самое:

var result = Fish.Where(f => f.SpeciesName == "COD" || f.SpeciesName == "Salmon") 
       .GroupBy(f => f.SpeciesName) 
       .Select(g => new { 
        Species = g.Key, 
        Age = g.Count(f => f.Age != null), 
        Weight= g.Count(f => f.Weight != null), 
        }); 

The Age и Weight агрегатов кажется немного сверхъестественным - они рассчитывают количество записей в каждой группе, где ассоциированная свойство не является нулевой. Это было ваше намерение, или вы после чего-то вроде «среднего возраста» рыбы в каждой группе?

+0

Отлично! Большое спасибо –

+0

Это намерение! –

+0

@MeelfanBmfp - круто, тогда все готово :) – Jamiec

Смежные вопросы