2012-05-31 5 views
2

비슷한 여러 줄 데이터가 있습니다. 그들은 게임의 최신 결과이며, 예를 들어 게임에서 3 골이 나오면 3 라인을 의미합니다.Linq 여러 열로 구분하고 최신 행을 선택

enter image description here

나는 별개의 한 경기 한 줄에합니다. 그러나 구별되는 선은 최신이어야합니다 (firstOrDefault?)

나는 status = Confirmed와 status = Open을 표시하고 싶지만 분명히 동일한 게임을 "Confirmed"와 "Open"

그래서 "Hometeam"과 "outteam"두 열로 그룹화하려고합니다. 그러나 같은 경기에서 3 골을 넣으면 3 라인을 얻을 수 있지만 "가장 새로운 라인"을 원한다.

누군가 나를 도와 줄 수 있습니까?

답변

3

당신은 같은 것을 시도해 볼 수도 있습니다 : 팀 조합이 각 그룹에 대해

  • 에 의해

    data.GroupBy(d => new { Hometeam = d.Hometeam, Outteam = d.Outteam }) 
        .Select(g => g.OrderBy(d => d.Status) 
            .ThenByDescending(d => d.GoalsHometeams + d.GoalsOutteams) 
            .First()) 
    
    1. 그룹, 최신 상태로 항목 (Confirmed는 알파벳 순서로 Open 앞에 오는)을 발견
    2. 여러 상태가 동일한 경우 (즉, 복수 Open) 결합 점수가 가장 높은 항목을 찾습니다.
    3. 그룹당 첫 번째 결과 (최신 있어야 함)를 가져옵니다.

    데모 : http://ideone.com/vlCtw

    샘플 결과 :

    Current game status results: 
    Confirmed, Fylkir, Valur, 3, 1 
    Confirmed, Selfoss, Grindavik, 3, 3 
    Confirmed, Keflavik, IBV, 1, 0 
    Confirmed, Stjarnan, IA, 1, 1 
    Confirmed, Breioablik, Fram, 0, 2 
    
  • +0

    , 당신에게 그러나 미안만을 받고 결과를 응답에 대한 정말 고마워요 상태 = 열기를 참조를 포함 -> HTTP : // ideone. co.kr/1GfRI ??? – aghaux

    +0

    @agh : 실제 데이터 세트의 상태가 표시되는 언어로, open은 실제로 사전 * 알파벳순으로 확인됩니다. 그러므로 내 솔루션을 다른 언어에 맞게 변경하려면'g.OrderByDescending (d => d.Status)'대신에 상태를 내림차순으로 정렬해야합니다. 그런 다음 예상 된 결과가 나타납니다. – mellamokb

    +0

    훌륭한 작품입니다. 도움을 많이 주셔서 감사합니다. – aghaux