2014-09-08 3 views
0

3 개의 열이있는 ef 연결 테이블이 있습니다. 나는 그 중 두 가지 중에서 뚜렷한 가치를 선택하고 싶다.세 개의 열 중 하나를 선택하십시오. 연결 테이블

enter image description here

나는에 ResourceId 및 MetaDataId ORDERBY 별개의 행을 선택합니다. 그래서이 경우 행 (1, 3 및 4)을 반환하고 싶습니다. 필자는이 시도 :

ctx.ResourceMetas.Where(a => a.ResourceId == resourceid).Distinct()}); 

을하지만, 분명히이 세 밖으로 고유 값을 가져옵니다. 어떻게 든이 두 가지에서 뚜렷하게 구분할 수 있습니까?

답변

1

고유 한 값으로 그룹화 한 다음 남은 부분의 최대 또는 최소를 가져올 수 있습니다.

ctx.ResourceMetas 
    .GroupBy(x=>new{x.ResourceId, x.MetaDataId}) 
    .Select 
    (
     x=>new 
     { 
      MetaListId = x.Min(m=>m.MetaListId), 
      ResourceId = x.Key.ResourceId, 
      MetaDataId = x.Key.MetaDataId 
     } 
    ) 
    .Where(a => a.ResourceId == resourceid) 

을하지만 시나리오에서 당신은 당신이 가진 것 이상의 세 가지 중 2 개 필드의 고유 한 값을 싶습니다 : 하나만 더 필드가 귀하의 경우에는

당신은 그것을 좋아 할 수있는 그것을 좋아하는 것 :

ctx.ResourceMetas 
    .GroupBy(x=>new{x.ResourceId, x.MetaDataId}) 
    .Select 
    (
     x=>new 
     { 
      MetaListId = x.Where(i=>i.MetaListId == x.Min(m=>m.MetaListId)).FirstOrDefault().MetaListId , 
      OtherField = x.Where(i=>i.MetaListId == x.Min(m=>m.MetaListId)).FirstOrDefault().OtherField , 
      ResourceId = x.Key.ResourceId, 
      MetaDataId = x.Key.MetaDataId 
     } 
    ) 
    .Where(a => a.ResourceId == resourceid) 
+0

아마 내가 resourceId 만 가지고 있다고 덧붙여 야합니다. –

+0

이것은 효과가 있습니다! 고마워요! :) –

관련 문제