Il suffit d'utiliser les opérateurs booléens normaux & & et ||:
XDocument db = XDocument.Load(xmlPath);
var query = (from vals in db.Descendants("Customer")
where (textbox1.Text != "" &&
vals.Element("CustomerID") == Convert.ToInt32(textbox1.Text)) ||
(textbox2.Text != "" && vals.Element("Name") == textbox2.Text)
select vals).ToList();
C'est juste une traduction directe du code original - mais je pense que vous aurez besoin d'un casting de vals.Element("CustomerID")
à int
, et vous ne voulez pas vraiment convertir textbox1.Text
à chaque itération, je suis sûr. Vous devez également convertir le "nom" XElement
en une chaîne. Que diriez-vous ceci:
int? customerId = null;
if (textbox1.Text != "")
{
customerId = int.Parse(textbox1.Text);
}
XDocument db = XDocument.Load(xmlPath);
var query = (from vals in db.Descendants("Customer")
where (customerId != null &&
(int) vals.Element("CustomerID") == customerId) ||
(textbox2.Text != "" &&
(string) vals.Element("Name") == textbox2.Text)
select vals).ToList();
Sinon, vous pouvez séparer les deux parties de la requête et « union » les résultats ensemble. Ou - de préférence IMO - vous pouvez construire la requête plus dynamiquement:
var query = db.Descendants("Customer");
if (textbox1.Text != null)
{
int customerId = int.Parse(textbox1.Text);
query = query.Where(x => (int) x.Element("CustomerID") == customerId);
}
if (textbox2.Text != null)
{
query = query.Where(x => (string) x.Element("Name") == textbox2.Text);
}
List<XElement> results = query.ToList();
Fantastique encore Jon. J'ai déjà traité les valeurs comme vous l'avez mentionné dans la deuxième option, en utilisant simplement le code ci-dessus pour rendre les choses plus simples. Encore merci beaucoup! –