2011-03-06 21 views
0

Windows 서비스 알림 프로젝트 (.NET 4.0)에서 StringTemplate을 사용하고 있습니다. 내 목표는 쿼리 및 문자열 템플릿을 정의하는 XML 파일을 읽고 처리하는 것입니다. 그런 다음 클래스는 DataTable의 결과를 전자 메일 용 템플릿에 바인딩합니다. 아래는 XML 스 니펫과 LINQ 문과 바인딩을 수행하는 C#입니다.DataSet을 StringTemplate에 동적으로 매핑하십시오.

<!-- XML Data Original--> 
<Items> 
    <Item> 
    <Query> 
     Select name, title, date from People; 
    </Query> 
    <Template> 
     Welcome $name to $title$ on $date$. 
    </Template> 
    </Item> 
</Items> 

var dataTable = database.GetQuery(query); 
var data = (from dataRow in dataTable.AsEnumerable() 
      select new 
      { 
       Name = dataRow.Field<string>("Name"), 
       Title = dataRow.Field<string>("Title"), 
       Date = dataRow.Field<DateTime>("Date") 
      }).Distinct(); 
    stringTemplate.SetAttribute("Name", data.Name); 
    stringTemplate.SetAttribute("Title", data.Title); 
    stringTemplate.SetAttribute("Date", data.Date); 

문제는 위의 C#은 정적이며, 나는 그것을 동적으로 만들고 싶습니다. XML 쿼리 요소에 다른 필드를 추가하고 해당 템플릿 필드를 추가해야하는 경우에는 어떻게됩니까?

<!-- XML Data Modified--> 
<Items> 
    <Item> 
    <Query> 
     Select name, title, date, location from People; 
    </Query> 
    <Template> 
     Welcome $name to $title$ on $date$ at $location$. 
    </Template> 
    </Item> 
</Items> 

DataTable에 새 열이 포함되어 있지만 LINQ 문과 바인딩 코드는 포함되어 있지 않습니다. 내 질문은 가져올 데이터 테이블에서 내 stringtemplate 동적으로 어떤 전략을 채용 할 수 있습니까? 참고 현재 LINQ를 사용하고 있지만 솔루션을 사용할 필요는 없습니다.

답변

1

내가 취한 접근법은 익명 형식 및 문자열 템플릿 파일에서 컬렉션을 반복하는 것이 아닙니다. 또한 같은 방식으로 하나의 레코드 "정적"을 처리하지만 Linq 문에 FirstOrDefault 필터를 사용합니다.

C 번호 :

var dataTable = database.GetQuery(query); 
var data = (from dataRow in dataTable.AsEnumerable() 
      select dataRow); 
stringTemplate.SetAttribute("dynamic", data); 

템플릿 : 당신이 당신의 대답이 템플릿에서

$dynamic:{ d | 
Welcome $d.name$ to $d.title$ on $d.date$ at $d.location$ 
}$ 
+0

; 당신은 당신의 질문에있는 XML의 나머지 부분을 가지고 있지 않습니다. 실제 템플릿; 그 XML 여전히 거기에, 또는 당신이 메시지를 생성하고 마우스 조작을 사용하여 XML에 수동으로 삽입 ... 또는 그런 식으로 문자열 템플릿을 사용 했습니까? – Dave

관련 문제