2009-12-02 4 views
1

트랜잭션이있는 데이터베이스 테이블이 있습니다. 필드 중 하나에는 XML 메시지가 있고 필드 유형은 "xml"입니다. 이 XML에는 직원이 있으며이 필드는 검색해야합니다. 런타임에 제공되는 직원 번호와 일치하는 모든 행을 검색하려고합니다. Linq와 함께 할 수 있습니까?테이블 Linq를 사용하여 XML을 검색, 할 수 있습니까?

여기에 트랜잭션 테이블의 행 중 하나의 XML 예제가 나와 있습니다. 이 필드를 "메시지"라고합니다. "직원"값을보고 사용자가 제공 한 값과 일치하는 행을 반환해야합니다.

<interface> 
    <mac>1452345234</mac> 
    <device>device1</device> 
    <id>1234567</id> 
    <terminal> 
    <unit>1</unit> 
    <trans> 
     <event>A3</event> 
     <employee>3333</employee> 
     <time>2008-10-02T11:41:00.0000000+00:00</time> 
    </trans> 
    </terminal> 
</interface> 
+0

는 데이터베이스 나 응용 프로그램에서 결과를 필터링 하시겠습니까? –

+1

참조 http://stackoverflow.com/questions/282391/can-linq-to-sql-query-an-xml-field-db-serverside –

+0

필자는 엔티티를 사용 중이며 애플리케이션에서 필터링하려고한다고 언급해야합니다. – Retrocoder

답변

1

예, 그것은 LINQ 쉽게 할 수있다 :

var matchList = from t in transactions 
       where XDocument.Load (new StringReader (t.Message)) 
           .Descendants ("employee") 
           .Count (node => node.Value == employeeNr) > 0 
       select t; 
0

간단한 방법 :

List<YourRecord> GetRecords(string EmployeeId) 
{ 
    return TheTable.where(r => r.Message.Contains("<employee>" + empId + "</employee>")).ToList(); 
} 
+0

유감스럽게도 솔루션에서 다음과 같은 오류가 발생합니다. "데이터 형식 xml에서 데이터 형식 nvarchar, 테이블 'transactions', 열 'Message'로 암시 적으로 변환 할 수 없습니다. 이 쿼리를 실행하려면 CONVERT 함수를 사용하십시오. "CONVERT"함수를 어떻게 사용해야합니까? – Retrocoder

+0

내가 엔티티를 사용하고 있다고 언급 했어야했다. – Retrocoder

관련 문제