Я разрабатываю механизм отчетности для своего проекта. В проекте будет несколько отчетов, каждый из которых может быть выражен в виде запроса Linq; у некоторых будут параметры, а у других нет.
Теперь, чтобы удовлетворить требования моих клиентов, мне нужно возвращать результаты запросов в формате XML, чтобы они могли применить преобразование XSL, чтобы они выглядели красиво в соответствии с их собственным вкусом.
Итак, мой план на данный момент состоит в том, чтобы иметь абстрактный Report
базовый класс, из которого будут производиться все мои отчеты. Базовому классу потребуются следующие методы:
public virtual void SetParameter(string ParameterName, object Value) {
throw new NotImplementedException("This report does not accept parameters.");
}
public abstract object GetData(); // what return type?
public XElement GetXMLData() {
// calls GetData() and uses some kind of reflection to turn the data into XML?
}
Чтобы конкретизировать это немного больше: SetParameter()
довольно очевиден. Предполагается, что GetData()
содержит запрос Linq и возвращает тип IEnumerable<'a>
, где 'a
— анонимный тип конечного результата. Но, очевидно, вы не можете объявить что-то анонимным, поэтому мне нужен какой-то другой общий способ связи с результатами моего запроса Linq, который позволит мне перебирать возвращаемые поля и создавать соответствующую XML-схему.
Каким должен быть возвращаемый тип GetData()
? Как получить имена/значения полей? В качестве альтернативы, есть ли лучший способ достичь моей цели?