2011-03-02 5 views
0

내가 기대하는 응답을 생성하지 않는 일부 LINQ와 함께 이상한 상황이 발생했습니다.LINQ GroupBy 절에 작업이 포함될 수 있습니까?

내가 기대했던 방식으로 다음 그룹 (두 그룹 : 홀수 하나, 짝수 하나) :

var ints = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 

var foo = from i in ints 
    group i by i % 2 into g 
    select new { 
     Key = g.Key, 
     Group = g 
    }; 

내가 MySQL 데이터베이스에 다음과 유사한 쿼리를 수행 (사용 IQ 드라이버)를 사용하면 데이터베이스에있는 각 항목에 대해 별도의 "그룹"이 될 수 있습니다.

var bar = from f in MYDATABASE_TABLE.Take(10) 
    group f by f.Uid % 2 into g // where Uid is an int 
    select new { 
     Key = g.Key, 
     Group = g 
    }; 

왜 이렇게 이상하게 행동하는지 아이디어가 있습니까? GroupBy 절은 어떤 종류의 작업이라도 추가하면 이상하게 작동하는 것 같습니다. 예를 들어 0과 1에 대해 임의의 숫자 생성기를 시도 할 수 있습니다 (예 : "f.Uid % 2"절을 random.Next (1)로 바꾸면 비슷한 결과가 나타납니다)

편집 : Took "linq-to-sql"에 대한 참조가 잘못되어 IQ 드라이버에 대한 명시 적 참조가 추가되었습니다.

+3

Linq-to-SQL ... MySQL에서? –

+0

예, MySQL (죄송합니다 - 이것이 차이를 만들지 모르겠다). –

+0

@ 토니, LinqToSql이 MySQL을 지원하지 않기 때문에 질문이 제기되었습니다. –

답변

0

는 (검증되지 않은,하지만 난 비슷한 짓을했는지)이 시도 :

var bar = from f in MYDATABASE_TABLE.Take(10) 
    let u = f.Uid % 2 
    group f by u into g // where Uid is an int 
    select new { 
     Key = g.Key, 
     Group = g 
    }; 

이것에 대해 잘못 될 수 있지만 시도하기 쉬워야한다.

+0

좋습니다. LINQPad를 통해 지금이 작업을 시도했지만 불행히도 여전히 이상한 반응을 나타 냈습니다. 내 추측으로는 "by"와 "into"사이의 절을 "나중에 평가 해 봅시다"라고 간주하지만 내부 작동 방식에 대한 좋은 생각이 없습니다. –

+0

@ 토니 - 예, let 절은 구문론적인 설탕 일뿐입니다. 그래서 나는 그것이 길다는 것을 알았습니다. 나는 전에 이것을 한 것을 알고있다. 내 오래된 코드를 찾을 수 있는지 보겠습니다. –

+0

다른 사람들의 답변에 따라 코드가 실행중인 데이터베이스를 기억하고 있습니까? –

관련 문제