Linq 구문-여러 열 선택


97

이것은 내 엔티티 모델에 사용중인 Linq 구문입니다.

IQueryable<string> objEmployee = null;

objEmployee = from res in _db.EMPLOYEEs
              where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
              select res.EMAIL;

여러 열을 선택하려면 어떻게해야합니까? res.ID도 선택하고 싶습니다. 어떻게받을 수 있습니까? IQueryable이 작동하지 않을 것이라고 생각합니다. 그리고 이것을 Linq to SQL이라고합니다. 맞습니까?


3
LinqToSql과 엔티티 프레임 워크는 다릅니다. 참조 stackoverflow.com/questions/8676/...
— 기드온

답변:


190

다른 답변에서 알 수 있듯이 익명 유형을 사용해야합니다.

구문에 관해서는 개인적으로 메소드 체인을 선호합니다. 동등한 메소드 체인은 다음과 같습니다.

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo)
    .Select(x => new { x.EMAIL, x.ID });

AFAIK, 선언적 LINQ 구문은 컴파일 될 때 이와 유사한 메서드 호출 체인으로 변환됩니다.

최신 정보

전체 객체를 원하면 Select(), 즉

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo);

72

예를 들어 익명 유형을 사용할 수 있습니다.

  var empData = from res in _db.EMPLOYEEs
                where res.EMAIL == givenInfo || res.USER_NAME == givenInfo
                select new { res.EMAIL, res.USER_NAME };

이 식을 올바르게 작성하는 방법을 제안 해 주시겠습니까? select new {(DateTime.Now-debt.ClaimDate), debt.Amount}; ? 오류 발생 : 유효하지 않은 익명 유형 멤버 선언자
— Dainius Kreivys

1
@DainiusKreivys select new { Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}. 대답에 사용되는 형식은 속기입니다. 여기서 초기화 식의 멤버 이름은 익명 유형의 필드 이름으로 사용됩니다. 예를 new {res.EMAIL, res.USER_NAME}위한 속기이다 new {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}. 날짜가있는 경우와 같이 표현식이있는 경우-속기가 적용되지 않으므로 컴파일러 오류가 발생합니다.
— Ivan Danilov

5
 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {res.EMAIL, res.USERNAME} );

또는 사용할 수 있습니다

 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {email=res.EMAIL, username=res.USERNAME} );

설명 :

  1. db에서 직원을 res로 선택하십시오.

  2. where 조건에 따라 직원 세부 정보를 필터링합니다.

  3. 새 {}를 사용하여 익명 개체를 만들어 직원 개체에서 필수 필드를 선택합니다.


답변에 설명을 추가하십시오.
— Sandeep

다른 열에 어떻게 액세스합니까?
— ARidder101
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.