2011-05-04 4 views
-1

아래 코드에서 개체를 자체에 조인하려고합니다. join kinda는 작동하지만 예상 된 1 행 대신 4 행을 제공합니다. 동일한 1 행에 두 값이 있고 동일한 객체의 4 사본이 아닙니다. 감사!!개체를 linq join하는 방법은 무엇입니까?

var values = rptDataPkg.Datasets.Item(0).Result.AsEnumerable() 
.Where(f => f.Field<int>("RowType") == 3 && 
      f.Field<int>("Category") == 1 && 
      ((f.Field<int>("ItemID") == -1000) || (f.Field<int>("ItemID") == -1001))) 
.Select(f => new 
{  
    joinOn = 1, 
    Proc = f.Field<string>("Item"), 
    fieldVal = Convert.ToDecimal(f.Field<decimal?>(field)) 
}).ToList(); 

var join = values.Join(values, b1 => b1.joinOn, b2 => b2.joinOn, 
      (b1, b2) => new 
      { 
       inHVal = b1.fieldVal, 
       offSVal = b2.fieldVal 
      }); 
+0

-1이 표시됩니다. 무엇을 성취하려고합니까? Linq와 Join을 그림으로 가져 오는 것보다 더 간단한 방법은 없을까요? 그것은 당신이 2 경기 (-1000과 -1001)를 십자가에 합류시켜 4 경기로 끝내는 것 같습니다. –

답변

2

귀하의 values 목록에 두 개의 항목이 있다고 생각됩니다. 둘 다 joinOn 값을 가지므로 두 행이 서로 일치하게됩니다. 행이 A와 B 인 경우

(A, A) 
(A, B) 
(B, A) 
(B, B) 
+0

오른쪽! 나는 Linq를 최근에 모든 것에 추가하려고 노력해 왔으며 때로는 필요하지도 않습니다. – user259286

+0

나는 최근에 linq와 lambdas의 awesomeness를 발견하고 종종 그것 없이는 더 직관적 인 것들을 위해 비슷하게 사용하려고 시도한다. 일반적인 루프가 일반적으로 더 빠름을 기억하는 것이 중요합니다. – Oofpez

+0

@Oofpez : 아니, 속도 차이는 일반적으로 중요하지 않다는 것을 기억하는 것이 중요하지만 가독성이 중요합니다. –

관련 문제