2012-01-24 4 views
1

Рассмотрим таблицу, содержащую два поля: FieldID и Position. Postion - это байт, который варьируется от 1 до 4.linq-to-sql подсчет агрегатов на основе списка идентификаторов

Я пишу функцию, которая получает список идентификаторов полей и возвращает количество элементов, которые находятся в каждой из Позиций в linq-to-sql. Объект, содержащий результат, имеет 4 поля, которые содержат каждый из счетчиков.

Это то, что у меня есть:

public MyObjectModel GetCount(List<int>TheList) 
{ 
    using (DC MyDC = new DC) 
    { 
    var Result = from t in MyDC.Table 
        where TheList.Select(i => i).Contains(t.FieldID) 
        select new MyObjectModel() 
        { 
         CountP1 = (from t in MyDC.Table 
           where t.Position = 1 
           where t.FieldID = ...).Count(); 

У меня возникли проблемы Linqing подсчет на основе списка, которую я получаю в качестве параметра. Я подхожу к этому неправильно? Я хочу избежать запроса каждого счета по отдельности в 4 разных запросах, каждый для одного счета; Я ищу, чтобы получить 4 счета в одном чтении. Каковы ваши предложения. Благодарю.

+0

Вы получаете ошибку или только неправильные результаты? – CodingGorilla

+0

@CodingGorilla: на данный момент я изо всех сил пытаюсь получить синтаксис запроса для генерации результата. – frenchie

ответ

1

Почему вы не начинаете с группы Position, а затем, в select, возвратите счет каждой группы?

Что-то вроде:

var list = MyDC.Table 
    .Where(your filter) 
    .GroupBy(item => item.Position) 
    .Select(g => new { pos = g.Key, count = g.Count()) 
    .ToList(); 

// list contains items of type (pos : int, count : int) where pos is your Position  

Вы можете даже преобразовать его в словарь с key = pos и val = count() так, что проще подобрать значения модели по вашему выбору.

+0

Что нужно поместить в фильтр? где t.Position = ??? И что происходит с моим списком ints? Как tey соответствует данным в таблице? – frenchie

+0

Фильтр должен выбрать только данные, соответствующие вашему списку. Затем идет группировка. –