programing

LINQ to SQL - 특정 열을 선택하고 강하게 입력된 목록을 반환하는 방법

padding 2023. 8. 1. 20:20
반응형

LINQ to SQL - 특정 열을 선택하고 강하게 입력된 목록을 반환하는 방법

LINQ to SQL을 사용하여 테이블에서 몇 개의 특정 열을 선택하고 강력하게 입력된 개체 목록으로 결과를 반환하려고 합니다.

예:

var result = (from a in DataContext.Persons
                              where a.Age > 18
                              select new Person
                              {
                                  Name = a.Name,
                                  Age = a.Age
                              }
                              ).ToList();

어떤 도움이라도 주시면 대단히 감사하겠습니다.

빌드는 괜찮지만 실행하면 오류가 발생합니다.엔티티 유형의 명시적 구성MyEntity쿼리에서 사용할 수 없습니다.

기본적으로 당신은 올바른 방법으로 그것을 하고 있습니다.그러나 다음의 인스턴스를 사용해야 합니다.DataContext쿼리를 위해 (그것은 명백하지 않습니다.DataContext는 쿼리의 인스턴스 또는 유형 이름입니다.

var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new Person { Name = a.Name, Age = a.Age }).ToList();

보아하니, 그Personclass는 LINQ에서 SQL로 생성된 엔티티 클래스입니다.다음 열 중 일부만 사용하려면 고유한 클래스를 만들어야 합니다.

class PersonInformation {
   public string Name {get;set;}
   public int Age {get;set;}
}

var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new PersonInformation { Name = a.Name, Age = a.Age }).ToList();

자유롭게 교환할 수 있습니다.var와 함께List<PersonInformation>아무 영향도 주지 않고 여기에 있습니다(이것이 컴파일러가 하는 일입니다).

그렇지 않으면 쿼리를 로컬에서 작업하는 경우 익명 유형을 고려하는 것이 좋습니다.

var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new { a.Name, a.Age }).ToList();

참고로 이 모든 경우에,result는 정적으로 형식화되어 있습니다(이 형식은 컴파일 시에 알려져 있습니다).후자의 유형은 a입니다.List유사한 익명 클래스를 생성한 컴파일러의PersonInformation위에 쓴 수업.C# 3.0을 기준으로 언어에 동적 타이핑이 없습니다.

업데이트:

만약 당신이 정말로 반품을 원한다면,List<Person>(가장 적합한 방법이 아닐 수도 있음), 다음과 같은 작업을 수행할 수 있습니다.

var result = from a in new DataContext().Persons
             where a.Age > 18
             select new { a.Name, a.Age };

List<Person> list = result.AsEnumerable()
                          .Select(o => new Person {
                                           Name = o.Name, 
                                           Age = o.Age
                          }).ToList();

위의 문장도 병합할 수 있지만, 명확하게 구분했습니다.

문제는 사실 속성 중 하나가 다른 테이블과의 관계라는 것이었습니다.전체 테이블을 로드할 필요 없이 다른 메소드에서 동일한 데이터를 가져올 수 있도록 LINQ 쿼리를 변경했습니다.

여러분의 도움에 감사드립니다!

myid(행의 ID)를 사용하여 DB 검색을 호출하고 다음과 같은 특정 열을 반환합니다.

var columns = db.Notifications
                .Where(x => x.Id == myid)
                .Select(n => new { n.NotificationTitle, 
                                   n.NotificationDescription, 
                                   n.NotificationOrder });

언급URL : https://stackoverflow.com/questions/1094931/linq-to-sql-how-to-select-specific-columns-and-return-strongly-typed-list

반응형