2012-01-24 1 views
1

FieldID와 Position이라는 두 개의 필드가있는 테이블을 고려하십시오. Postion은 1에서 4까지의 범위의 바이트입니다.linq-to-sql ID 목록을 기반으로 한 집계의 개수

FieldID 목록을 받고 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(); 

나는 문제가 내가 매개 변수로받을 목록을 기준으로 카운트를 린칭시에 봉착 :

이 내가 가진 것입니다. 나는 이것을 잘못된 방향으로 접근하고 있는가? 각 count를 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 = ??? 그리고 int의 내 목록은 어떻게됩니까? 테이블의 데이터와 어떻게 일치합니까? – frenchie

+0

필터는 목록과 일치하는 데이터 만 선택하는 것입니다. 다음 groupping 간다. –

관련 문제