2017-05-08 2 views
1

C# 목록이 좋지 않습니다. 매우 혼란 스럽기 때문입니다. 새 목록 께서 요소 Id, Name, Line1, Line2, Line3, Line4Line5를 볼 수C# list join declaration

var final = queryTable 
    .Join(skillTable, 
     query => query.Id_Skill, 
     skill => skill.Id, 
     (query, skill) => new { Id = query.Id, Name = query.Name, Line1 = skill.Line1, Line2 = skill.Line2, Line3 = skill.Line3, Line4 = skill.Line4, Line5 = skill.Line5 }) 
    .ToList(); 

그래서 : 그래서 지금은 다음과 같다 서로에 두 테이블에 합류했다.

이 목록의 유형은 무엇입니까? 무슨 뜻입니까? var 대신 목록을 어떻게 선언합니까? 나는 더 많은 목적을 위해 이것을 필요로한다.

처럼 :

List<theType> final = new List<theType>(); 
final = ... 
+3

하게 될 겁니다 –

+3

그것은 단지 [익명 형식 (https://docs.microsoft.com/를 생성 en-us/dotnet/articles/csharp/프로그래밍 가이드/classes-and-structs/anonymous-types). 나중에 참조 할 필요가 있다면 Louis-Roch가 말한 것입니다. –

+0

게시물에 투표 조언을 제공하지 마십시오. 단지 자원 봉사자 편집자를위한 작품을 만듭니다 - 감사합니다! – halfer

답변

3

이 참조해야하는 경우 나중에이

public class SomeName 
{ 
    int id { get; set; } 
    string Name { get; set; } 
    string Line1 { get; set; } 
    string Line2 { get; set; } 
    string Line3 { get; set; } 
    string Line4 { get; set; } 
} 

같은 모든 속성 클래스를 생성하고에서이 클래스

var final = queryTable 
.Join(skillTable, 
    query => query.Id_Skill, 
    skill => skill.Id, 
    (query, skill) => new SomeName() { Id = query.Id, Name = query.Name, Line1 = skill.Line1, Line2 = skill.Line2, Line3 = skill.Line3, Line4 = skill.Line4, Line5 = skill.Line5 }) 
.ToList(); 
+0

'새 SomeName()'? 빈 객체 목록은별로 유용하지 않습니다. – crashmstr

+0

@ crashmstr 네가 그것을 잊어 버렸지 만 Samich가 고쳤다. –

+1

속성에 값을 할당하거나 매개 변수화 된 생성자를 만들 수있다 – Samich

0

당신은 new { } 구문을 사용하여 익명 유형을 만드는. 즉, 특별히 필드가 같은 클래스를 만들지 않는 한 var 만 사용할 수 있습니다.

2

의 새로운 인스턴스를 생성하는 쿼리를 변경할 수 있습니다 anonymous types에 대한 문서 : (강조 표시가 추가됨)

일반적으로 익명 형식을 사용하여 변수를 초기화하면 var를 사용하여 변수를 암시 적으로 형식화 된 로컬 변수로 선언합니다. 컴파일러 만 익명 형식의 기본 이름에 액세스 할 수 있으므로 변수 이름에 형식 이름을 지정할 수 없습니다. var에 대한 자세한 내용은 Implicitly Typed Local Variables을 참조하십시오.

쿼리가 실행 된 후에 유형을 다시 사용하려는 경우 가장 좋은 방법은 아마도 그 목적을위한 클래스를 만드는 것입니다.

대체 솔루션은 Tuple을 사용하는 것으로 다른 클래스를 만드는 것을 절약 할 수 있지만 너무 많은 위치에서 유형을 참조 할 계획이라면 사용할 수 있습니다. 같은 방법으로 데이터를 추가로 조작하려는 경우에만 Tuple을 사용할 것입니다.

(query, skill) => Tuple.Create(query.Id, query.Name, skill.Line1, skill.Line2, 
           skill.Line3, skill.Line4, skill.Line5 }); 

당신은 모든 속성을 가진 클래스를 만들려고 할 수있는 List<Tuple<int, string, .... >