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.