LINQ를 사용하는 c# 메서드에서 SQL로 익명 유형을 반환하는 방법

데이터를 익명 유형(다양한 데이터 유형의 데이터 약 6열 포함)으로 반환하는 표준 LINQ to SQL 쿼리가 있습니다.

이 반환 된 객체를 메서드 호출자에게 반환하거나 메서드가 포함 된 객체의 속성에 할당하여 프로그램의 다른 부분에서 사용할 수 있도록하고 싶습니다.

익명 유형('var&39;>)인 경우 어떻게 해야 하나요?

편집 - 여기 코드가 있습니다:

    using (ormDataContext context = new ormDataContext(connStr))
    {
        var electionInfo = from t1 in context.elections
                   join t2 in context.election_status
                   on t1.statusID equals t2.statusID
                   select new { t1, t2 };
    }
질문에 대한 의견 (4)
해결책

익명 유형을 클래스로 만들기...

public class Person
{
    public Person() {
    }

    public String Name { get; set; }
    public DateTime DOB { get; set; }
}

Person p = 
    from person in db.People 
    where person.Id = 1 
    select new Person { 
        Name = person.Name,
        DOB = person.DateOfBirth
    }
해설 (8)

C#에서는 어떤 메서드도 익명 타입의 명시적 타입으로 입력할 수 없습니다. 말하자면 '이름'을 지정할 수 없으므로 메타데이터 서명에 표시할 수 없습니다.

정말로 익명 유형인 값을 반환하려는 경우 두 가지 옵션이 있습니다.

  1. 메서드의 반환 유형을 System.Object로 설정합니다. 그런 다음 다른 메서드에서 타입이 지정된 값을 얻기 위해 악의적인 캐스팅 해킹을 할 수 있습니다. 이것은 매우 취약하므로 권장하지 않습니다.
  2. 일반 메서드와 유형 추론 트릭을 사용하여 반환 유형을 올바르게 가져옵니다. 이렇게 하려면 접근 방식에 대한 매우 흥미로운 서명 정의가 필요합니다.

익명 타입은 실제로 이런 식으로 전달되도록 고안된 것이 아닙니다. 이러한 방식으로 함수 간에 전달해야 하는 경우에는 유형을 명시적으로 정의하는 것이 좋습니다.

해설 (2)

39 var doesn& 사용하여, t make it 익명의 유형:. 이 변수를 사용하여 var 는 이제 그냥 유형이어야 support. dell. 오른쪽에 있는 할당에서는. # 39 의 it& 그냥 파선-짧은 손. 그건 진짜 클래스용 오른쪽에 있는 경우 해당 유형의 변수가 될 것으로 보인다.

예를 들면 다음과 같습니다.

var person = new Person { Name = "bob" };

사람과 사람, 유형의 가변입니다 사용할 경우에도 var 키워드.

익명 유형은 = {이름을 사용하여 새로운. }. 이 경우 it& # 39 의 새로운 익명 클래스를. 단 한가지 변수가 할당하십시오 var (또는 객체) 를 사용하여 정의할 수 없기 때문에 기존 이름을 사용할 수 있습니다.

예를 들면 다음과 같습니다.

var person = new { Name = "bob" };

이 경우 런타임에 익명의 사람이 정의된 유형.

일반적으로 @Chalkey 통과할 수 있다』 고 스케쳐내 다른 방법을 사용하여 명명된 유형, 익명의 한 결과 다시 없습니다.

39 사용할 수밖에 없는 경우, ll 전달해야 익명의 유형, you& 다시 사용할 수 있다 ',' 객체에는 타입의 객체가 반사 http://support. it& # 39 의 속성.

해설 (4)

존 스키트가 이 방법을 설명하는 블로그를 작성했는데, 제목이 Horribly Grotty Hack입니다. 제목에서 알 수 있듯이 익명의 타입을 반환하는 방법을 찾아서는 안 됩니다. 대신 반환할 수 있는 유형을 만드는 것이 이 기능을 구현하는 올바른 방법이기 때문입니다.

따라서 반환할 유형에 대한 구체적인 정의를 만든 다음 이를 쿼리에 입력하여 반환하는 것이 좋습니다.

해설 (4)

이 종류의 데이터를 사용하여 코드 진행 과정은 호출하십시오 방식에 따라 다릅니다.

수행할 경우 단순한 데이터 바인딩, 정말 don& # 39, t care about 유형 (즉 너회가 don& 액세스 할 수 있는 C #, # 39 는 명시적으로 특성는 code) 를 이언 험버이블 표시됨과 뒤로를 결과를 전달할 수 있습니다.

대부분의 경우 다트라빈딩 호출하십시오 통해 정확한 유형 속성 이름으로 매직 문장열 doesn& # 39, t, 아무튼 그래서 중요한 겁니다.

그렇지 않으면 변환하십시오 익명 유형을 필요한 명명된 유형:.

해설 (0)

주위에 큰 결과를 전달할 경우, 앱, 문자열, object&gt Dictionary&lt 사용할 수 있습니다. 하지만, 최소한 틀렸다니까 너회가 버릴 때 일부 오버헤드에 그러하너라 객체에는 줄일 수 있습니다 "고 말했다.

해설 (0)