2016-10-23 2 views
0

저는 LINQ 및 SQL 쿼리에 대해 매우 익숙하며 인터넷에서 약 2 시간 동안 검색을 해본 결과 현재 내 질문에 대한 답변을 찾고 있습니다. 그 이유는 여기에 게시하는 이유입니다. .(C# LINQ) 전자 메일을 사용하여 성 및 성을 선택하십시오.

값을 알고있는 사용자의 전자 메일 주소를 사용하여 LINQ 쿼리에서 사용자의 성 및 성을 잡으려고합니다.

예는 다음과 같습니다

using (userEntities db = new userEntities()) 
{ 
    var query = from o db.Users 
       where o.email == userEmail 
       select o; 

    if (query.SingleOrDefault() != null) 
    { 
      ... 
    } 
} 

이 내용은 전자 메일 주소를 선택, 어떻게 내가 그 행을 사용하여 이름 및 성을지고 가야합니까?

고맙습니다.

+0

했습니다를 참조하십시오 성이 use.LastName

과 같은 유형이 있습니다. 전체 행을 다운로드합니다. 행을 어떻게 사용하려고합니까? – MarcinJuraszek

+0

이것은 로그인 확인의 일부입니다. 그럼 어떻게하면 행과 변수에 firstname과 lastname을 추출합니까? – BillyGisbourne

+0

'var user = query.SingleOrDefault();'그런 다음 속성을 사용하십시오. –

답변

0

query.SingleOrDefault() 행이있는 경우 해당 행을 반환합니다. 변수에 할당하고 null 검사 후 필요한 정보를 얻으십시오. 열거 할 때, 쿼리를 실행하고있는 데이터베이스에 대한 질문으로 query

var query = from o db.Users 
      where o.email == userEmail 
      select o; 

var result = query.SingleOrDefault(); 
if (result != null) 
{ 
     ... // result.UserName, etc. 
} 
+0

나에게 설명해 주셔서 감사합니다! – BillyGisbourne

0

생각해 다시 검색 기준을 준수 User s의 수집을 제공합니다.

query.FirstOrDefault()을 수행 할 경우 사용자 조건에 맞는 첫 번째 사용자를 묻는 쿼리가있는 경우 쿼리를 열거합니다.

그래서, 당신의 질문에 대답을 수행 할 수 있습니다 : 당신은 사용자라는 순서가있는 DB 개체를 가지고

User user = query.FirstOrDefault(); 

if (user != null) 
{ 
    var name = user.FirstName + " " + user.LastName; 
} 
1

을 시퀀스의 각 요소는 이름 이메일과 속성이있는 사용자입니다 .

분명히 모든 사용자에게는 firstName과 lastName이라는 두 개의 다른 속성이 있습니다.

"thingies"의 순서가 있고 특정 조건 자와 일치하는 "thingies"만 원할 때마다 정확히 Where와 같은 기능을 사용합니다.

"thingies"의 순서가 있고 모든 "thingie"에 대해 원래 "thingie"를 기반으로 "other thingy"하나를 만들고 싶다면 Select 함수를 사용하십시오. 하나의 입력 요소를 하나의 출력 요소로 변환하는 것을 Projection in Linq라고합니다. 함수를 사용하여 입력 시퀀스의 모든 요소를 ​​출력 시퀀스의 한 요소로 정확하게 변환 (변환)하십시오.

그래서 firstName과 lastName으로 "other thingie"를 만들려면 다음을 수행하십시오. 다음과 같이

class UserName 
{ 
    public string firstName {get; set;} 
    public string lastName {get; set; 
} 
var result = db.Users 
    .Where(user => user.email == useremail) 
    .Select(user => new UserName() 
    { 
     FirstName = user.FirstName, 
     LastName = user.LastName, 
    }); 

나는 USEREMAIL 일치하는 모든 사용자를 타고 firstName과 모든 사용자의 성을 포함 클래스 사용자 이름의 새로운 객체를 생성합니다.

위에서 사용한 방법은 Select 문에서 사용하려는 모든 투영에 대해 클래스를 정의해야한다는 것을 의미합니다. 이것은 매우 귀찮은 일입니다. 특히, 매우 제한된 공간에서만 명령문의 결과를 사용하려는 경우 (예 : 새 오브젝트를 작성한 프로 시저 내에서만).

쿼리 결과를 다른 함수에 전달할 필요가 없으며이 함수 내에서만 (더 정확하게는 형식 매개 변수가 필요하지 않음) 사용자 이름 클래스를 선언하지 않아도됩니다.익명의 유형을 사용할 수 있습니다. 내가 클래스의 이름을 떠난

var matchingUserNames = db.Users 
    .Where(user => user.email == useremail) 
    .Select(user => new 
    { 
     FirstName = user.FirstName, 
     LastName = user.LastName, 
    }); 
foreach (var matchingUserName in matchingUserNames) 
{ 
    Console.WriteLine(matchingUserName.FirstName + ' ' 
     + matchingUserName.LastName); 
} 

참고 : 익명 유형은 가능한 당신이 투사되는 유형을 정의 할 필요없이 선택을 할 수 있습니다. 따라서 형식 이름이있는 결과에 결과를 전달할 수 없습니다. 실제로 유일한 결과는 각 객체가 FirstName과 LastName의 두 가지 속성을 갖는 일련의 객체라는 결과입니다. FirstName은 user.FirstName과 동일한 유형입니다. 익명 형식은 the joy of anonymous types

또 다른 나를 LINQ 이해를 얻기 위해 나에게 도움이 기사 그것은 단지 이메일을 다운로드하지 않습니다 The standard Linq operators

관련 문제