var Charts = chartGroup
.Descendants("charts")
.Elements("chart")
.Where(x => x.Attribute("id").Value == chartId.ToString())
.Select(x => x.Attribute("name").Value).ToList();
Ici, je veux utiliser un "in-clause" "(comme la clause in
en SQL) pour Attribute("id").Value
pour un tableau de chaînes:
comme:
Where(x => x.Attribute("id").Value in ("1","2")
Where(x => x.Attribute("id").Value` in charIds[]
comment y parvenir?
Si vous avez un ensemble de valeurs dans un tableau, vous pouvez utiliser:
.Where(x => charids.Contains(x.Attribute("id").Value)
Vous pouvez utiliser la méthode Contains de IEnumerable:
var ids = new[]{"1", "2"};
Where(x=>ids.Contains(x.Attribute("id").Value));
mettre à jour:
de plus, ce code sera transféré dans l'instruction 'in' en SQL pour IQueryable.
Vous pouvez faire quelque chose comme ça:
var ids = new []{"id1","id2", ... };
var Charts = chartGroup.Descendants("charts")
.Elements("chart")
.Where(x => ids.Contains(x.Attribute("id").Value))
.Select(x => x.Attribute("name").Value).ToList();
La IN
dans LINQ est Enumerable.Contains
ou Enumerable.Any
. Voici plusieurs approches:
string[] strIDs = new[]{ "6", "7" };
int[] intIDs = new[]{ 1, 2 };
char[] charIds = new[]{ '4', '5' };
....
.Where(x => strIDs.Contains(x.Attribute("id"))
|| intIDs.Any(i => i.ToString() == x.Attribute("id"))
|| charIds.Any(c => c.ToString() == x.Attribute("id")));
SQL Where – In
La fonctionnalité peut être facilement obtenue avec l'expression lambda. Requête SQL -
Select Name,Id from Category Where Id In (71,72)
Expression Lambda -
List checkedRecords = new List { 71, 72 };
var Cs = Context.Categories.Where(c => checkedRecords.Contains(c.Id));
J'espère que cela aiderait.
quelque chose comme ... où charIds.Contains (x.Attribute "id" .Value)