在lambda表达式的子句中

时间:2013-11-26 08:46:53

标签: c# linq lambda

var Charts = chartGroup
     .Descendants("charts")
     .Elements("chart")
     .Where(x => x.Attribute("id").Value == chartId.ToString())
     .Select(x => x.Attribute("name").Value).ToList();

这里我想对in的字符串数组使用“in-clause”“(就像SQL中的Attribute("id").Value子句一样):

像:

Where(x => x.Attribute("id").Value in ("1","2")
Where(x => x.Attribute("id").Value` in charIds[]

如何实现这个目标?

7 个答案:

答案 0 :(得分:20)

如果数组中有一组值,则可以使用:

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

答案 1 :(得分:3)

您可以使用IEnumerable的包含方法:

var ids = new[]{"1", "2"};
Where(x=>ids.Contains(x.Attribute("id").Value));

<强>更新

此外,此代码将在SQL中的'in'语句中为IQueryable传输。

答案 2 :(得分:3)

您可以这样做:

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 :(得分:1)

LINQ中的INEnumerable.ContainsEnumerable.Any。以下是几种方法:

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

答案 4 :(得分:0)

类似于......其中charIds.Contains(x.Attribute“id”.Value)

答案 5 :(得分:0)

SQL Where – In的功能可以通过Lambda Expression轻松实现。 SQL查询-

Select Name,Id from Category Where Id In (71,72)

Lambda表达式–

List checkedRecords = new List { 71, 72 };
var Cs = Context.Categories.Where(c => checkedRecords.Contains(c.Id));

我希望这会有所帮助。

答案 6 :(得分:-1)

{{1}}