2014-12-01 4 views
-3

데이터베이스를 쿼리하고 두 개의 열을 하나의 문자열로 연결하려고하면이 작업을 쉽게 수행 할 수 있습니까?SQL 쿼리에서 문자열 연결 C#

public ActionResult GetContactList (int? id) 
{ 
    var contacts = (from ofg in db.Contacts 
        where ((ofg.ContactId == id) && (ofg.Deleted == false)) 
        select new 
         { 
          (ofg.FirstName + ofg.Surname as ofg.FullName), 
          ofg.ContactID 
         }).OrderBy(ofg => ofg.FirstName); 

    return this.Direct(contacts.ToArray()); 
} 
+6

예가 효과가 있습니까? 만약 당신이 어떤 예외가 있습니까? 왜 DB가 아닌 코드를 통해이 작업을 수행합니까? – ChrFin

답변

2

는 아마 다음과 같을 것 작동하지 않는다 :

OrderBy(ofg => ofg.FirstName) 

개체에 FirstName 필드가 없으므로 (만 FullNameContactID.) 해당 필드에 의해 주문해야하는 경우, 당신이 그것을 선택해야합니다 :

select new { FirstName = ofg.FirstName, FullName = ofg.FirstName + ofg.Surname, ContactID = ofg.ContactID } 

당신은 또한 당신의 FullName 필드는 이름 사이에 공백을 추가하지 않습니다이 논리에서 찾을 수 있습니다 . 원하는 경우 논리에 포함시켜야합니다.

익명 객체 대신 실제 모델의 경우에는 FullName 필드와 같은 것이 종종 좋은 사례입니다. 이런 식으로 뭔가를 생각해 자신이 속한 객체에 FullName 로직을 캡슐화하는 것입니다, 당신은 단지 그 개체의 인스턴스를 선택할 수 있습니다

public class SomeModel 
{ 
    public string FirstName { get; set; } 
    public string Surname { get; set; } 
    public int ContactID { get; set; } 

    public string FullName 
    { 
     get 
     { 
      return string.Format("{0} {1}", FirstName, Surname); 
     } 
    } 
} 

:

select new SomeModel { FirstName = ofg.FirstName, Surname = ofg.Surname, ContactID = ofg.ContactID } 

이 방법이 걸리는 코드는 않을 것 모델을 생성하는 논리를 복제해야하는 경우 모델 자체는 소유하고있는 논리를 포함합니다. 그런 다음 계속해서 더 많은 기능을 추가하고 단일 모델로 중앙 집중화 할 수 있습니다.

+1

'모델 자체에 자신이 소유 한 논리가 들어 있습니다. '+1 : 그럼 당신은 또한 예를 들어. "String.Format' 문자열을 변경하여"LastName FirstName "대신"FirstName LastName "이 필요하면 ... – ChrFin

+0

감사합니다. 위에서 제안한대로 전체 이름 메서드를 추가하고 오류를 얻으려고했습니다. 지정된 형식 멤버 'FullName'은 LINQ to Entities에서 지원되지 않습니다. 이니셜 라이저, 엔티티 구성원 및 엔티티 탐색 특성 만 지원됩니다. – stephenjgray

+0

@stephenjgray : 정확히 무엇을 시도 했습니까? – David

0

보십시오 smaple에 대해 익명 객체의 속성 이름을 추가 : 다음

select new { FullName = ofg.FirstName + ofg.Surname, ContactID = ofg.ContactID } 

참고 :이 경우 새로운 익명 객체를 생성

public ActionResult GetContactList (int? id) { 

    var contacts = from ofg in db.Contacts 
        where ((ofg.ContactId == id) && (ofg.Deleted == false)) 
        order by ofg.FirstName 
        select new { FullName = (ofg.FirstName + ofg.Surname), 
           ContactID = ofg.ContactID }; 

    return this.Direct(contacts.ToArray()); 

} 
+0

고마워요 펠리페,이게 완벽하게 작동합니다 – stephenjgray