Angesichts der unten genannten XML muss ich alle Mitarbeiter, die zu einer Abteilung gehören zurückgeben. Also, wenn Department = Mode sollte 3 Mitarbeiter RückkehrMitarbeiter zurückgeben mit Linq zu xml
<?xml version="1.0" encoding="utf-8" ?>
<Store>
<Departments>
<Department name="Fashion">
<Employees>
<Employee FirstName="Jo" Surname="Blogg"/>
<Employee FirstName="Mark" Surname="Smith"/>
<Employee FirstName="Rose" Surname="Blogg2"/>
</Employees>
</Department>
<Department name="Makeup">
<Employees>
<Employee FirstName="Sonia" Surname="Smith2"/>
<Employee FirstName="Jenny" Surname="Blogg3"/>
</Employees>
</Department>
</Departments>
</Store>
, was ich versucht habe, aber nicht kompilieren und andere Versuche waren nicht am gewünschten Ergebnis
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
namespace ConsoleApplicationXml
{
class Program
{
static void Main(string[] args)
{
var xDocument = XDocument.Load("Store.xml");
//Get all employees that belong to "Fashion
string departmentName = "Fashion";
//compiles but get object variable not set
var employees = (from emp in xDocument.Descendants("Employees")
where (emp.Parent.FirstAttribute.Value == departmentName)
select new Employee
{
DepartmentName = departmentName,
FirstName = emp.FirstAttribute.Value,
Surname = emp.LastAttribute.Value
}).ToList();
// NICHT KOMPILIEREN zurückkehren !!
var employees = (from emp in xDocument.Descendants("Employees")
where (emp.Parent.FirstAttribute.Value == departmentName)
let xFirstName = emp.Element("Employee").FirstAttribute("FirstName")
let xLastName = emp.Element("LastName")
select new Employee
{
DepartmentName = departmentName,
FirstName = xFirstName.Value,
Surname = xLastName.Value
}).ToList();
}
}
public class Employee
{
public string DepartmentName { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
}
}
Hallo danke, das funktioniert definitiv. Willst du damit sagen, dass du auch viele direkt auswählen und die 2 from-Klauseln eliminieren kannst? – developer9969
Ja, 'SelectMany()' ist die äquivalente Methode für die 2 'from' -Klauseln im Abfragestil: http://stackoverflow.com/questions/6414816/is-there-ac-sharp-linq-syntax-for-the -queryable-selectmany-method – har07