복붙노트

[SQL] LINQ 조합 사용?

SQL

LINQ 조합 사용?

는 SQL :

SELECT date,total_usage_T1 as TotalUsageValue,'T1' as UsageType FROM TblSayacOkumalari
UNION ALL
SELECT date,total_usage_T2 as TotalUsageValue,'T2' as UsageType FROM TblSayacOkumalari

그리고 LINQ로 변환 할 시도

IEnumerable<TblSayacOkumalari> sayac_okumalari = entity.TblSayacOkumalari
.Select(x => new 
    { x.date, x.total_usage_T1 })
.Union(entity.TblSayacOkumalari.Select(x => new 
    { x.date, x.total_usage_T2 }));

하지만 LINQ에 UsageType로 'T1'을 변환하는 방법을 잘 모릅니다. 또한 사용하여 내 노동 조합도 올바르지 않습니다.

내 표는 다음과 같이 필드 :

| date | total_usage_T1 | total_usage_T2 |

| 2010 |             30 |             40 |
| 2011 |             40 |             45 |
| 2012 |             35 |             50 |

나는 이런 식으로 원하는

| date | TotalUsageValue | UsageType     |

| 2010 |             30 |             T1 |
| 2011 |             40 |             T1 |
| 2012 |             35 |             T1 |
| 2010 |             40 |             T2 |
| 2011 |             45 |             T2 |
| 2012 |             50 |             T2 |

나는 매우 열심히 노력하지만, 할 수 없습니다. 도와주세요.

해결법

  1. ==============================

    1.편집하다

    편집하다

    Def. from MSDN
    Enumerable.Concat  - Concatenates two sequences.
    Enumerable.Union    - Produces the set union of two sequences by using the default equality comparer.
    

    내 게시물 : 연합 대 CONCAT () ()

        IEnumerable<TblSayacOkumalari> sayac_okumalari = 
       entity.TblSayacOkumalari
         .Select(x => new
              {     
                    date= x.date, 
                    TotalUsageValue = x.total_usage_T1,
                    UsageType     = "T1" 
               })
         .Concat(entity.TblSayacOkumalari
          .Select(x => new
              { 
                    date= x.date,
                    TotalUsageValue =  x.total_usage_T2, 
                    UsageType     = "T2" }
       )); 
    

    이 당신을 위해 작업을 할 것입니다 위의 내가 그랬던 것처럼 사용 유형에 대한 당신은 당신의 새로운 익명 형식에 UsageType = "T2"를 추가해야

    당신은 CONCAT 방법보다는 연합 (EU) 방법 가야보다 ..

     int[] ints1 = { 1, 2, 3 }; int[] ints2 = { 3, 4, 5 };
     IEnumerable<INT> union = ints1.Union(ints2);
     Console.WriteLine("Union");
     foreach (int num in union)
     {
        Console.Write("{0} ", num);
     }
     Console.WriteLine();
     IEnumerable<INT> concat = ints1.Concat(ints2);
     Console.WriteLine("Concat");
     foreach (int num in concat)
     {
        Console.Write("{0} ", num);
     } 
    

    산출

    연합과 CONCAT에 대한 사실

    CONCAT () 메소드는 단지 하나 하나 열거 개의 모음을 조합하지만, 어떤 동작을 수행하지 않는 출력 쇼 / 요소가 단 두 열거 컬렉션의 모든 요소가 단일 열거 컬렉션을 반환 처리.

    같은 요소는 노동 조합이 수행되는 모두 열거 모음에있는 경우 중복 즉 단지 하나의 요소를 돌려 제거하여 연합 () 메서드를 반환 열거 가능한 모음.

    참고 중점

  2. ==============================

    2.이 옵션을 사용합니다 :

    이 옵션을 사용합니다 :

    var result = entity.TblSayacOkumalari 
                       .Select(x => new  
                       { 
                           Date = x.date, 
                           TotalUsage = x.total_usage_T1,
                           UsageType = "T1"
                       }) 
                       .Union(entity.TblSayacOkumalari.Select(x => new  
                       { 
                           Date = x.date, 
                           TotalUsage = x.total_usage_T2,
                           UsageType = "T2"
                       })); 
    
  3. ==============================

    3.위해서 당신은 아마 그런 짓을하려는 익명 형식에 예상되는 속성 이름을 얻을 수 있습니다 :

    위해서 당신은 아마 그런 짓을하려는 익명 형식에 예상되는 속성 이름을 얻을 수 있습니다 :

    new { x.date, TotalUsage = x.total_usage_T1, UsageType="T1" }
    

    그리고 또한

    new { x.date, TotalUsage = x.total_usage_T2, UsageType="T2" }
    
  4. from https://stackoverflow.com/questions/11426615/linq-union-usage by cc-by-sa and MIT license