Преобразовать SQL-запрос в LINQ, чтобы получить значение столбца в виде строки XML - PullRequest
0 голосов
/ 13 декабря 2018

У меня следующий запрос в SQL.Мне нужно написать тот же запрос в LINQ, который даст тот же вывод, что и SQL-запрос в формате XML.

Этот оператор выбора возвращает значение столбца как вывод XML

SELECT Student.Name 
    FROM   StudentCategoryAssociation Assoc
     JOIN Student ON Assoc.CategoryId = Student.Id
 for xml raw('Category'), root('StudentCategories'), type

этогоэто:

<StudentCategories>
  <Category Name="StudentCategory" />
  <Category Name="Light" />
</StudentCategories>

1 Ответ

0 голосов
/ 13 декабря 2018

Может потребоваться немного больше, чем простой Linq, чтобы получить желаемый результат. Я попытался смоделировать вашу базу данных с помощью List в следующих примерах.

var result = new StudentCategories
               {  
                  Category = associationList
                            .Join(studentlist,
                            a=>a.Id,
                            s=>s.Id,
                            (a,s)=>new Category{Name=s.Name}).ToList()
              };
var serializer = new XmlSerializer(typeof(StudentCategories));
var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var settings = new XmlWriterSettings{OmitXmlDeclaration = true,Indent=true};
string xmlString;

using(var sww = new StringWriter())
using(XmlWriter writer = XmlWriter.Create(sww,settings))
{
  serializer.Serialize(writer, result,emptyNamespaces);
  xmlString = sww.ToString(); // Your XML
}

Где Categories и StudentCategories определены как

[XmlRoot(ElementName="Category")]
public class Category {
    [XmlAttribute(AttributeName="Name")]
    public string Name { get; set; }
}

[XmlRoot(ElementName="StudentCategories")]
public class StudentCategories {
    [XmlElement(ElementName="Category")]
    public List<Category> Category { get; set; }
}

Вывод будет

<StudentCategories>
  <Category Name="StudentCategory" />
  <Category Name="Light" />
</StudentCategories>
...