web-dev-qa-db-fra.com

Dans la clause dans l'expression lambda

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?

8
Madhuri Lad

Si vous avez un ensemble de valeurs dans un tableau, vous pouvez utiliser:

.Where(x => charids.Contains(x.Attribute("id").Value)
20
David Colwell

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.

3
Kirill Bestemyanov

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();
3
King King

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")));
1
Rango

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.

0
ShaileshDev

quelque chose comme ... où charIds.Contains (x.Attribute "id" .Value)

0
Cătălin Rădoi