以下代码按预期工作,但似乎不优雅.
.Where(x => x.Attributes().Contains(x.Attribute("Quick"))
&& !x.Attributes().Contains(x.Attribute("Brown"))
&& !x.Attributes().Contains(x.Attribute("Fox"))
&& !x.Attributes().Contains(x.Attribute("Jumps"))
&& !x.Attributes().Contains(x.Attribute("Lazy"))
&& !x.Attributes().Contains(x.Attribute("Dogs")))
Run Code Online (Sandbox Code Playgroud)
如你所见,我正在检查是否
[编辑]我的意图是......我想确保元素只有一个属性.我的意思是在这种情况下只有"快速"属性.我知道伯爵的风格,伯爵不区分它的名字.[/编辑]
[Edit2]我想要元素,只要它有sigle属性,没有别的.[/ Edit2]
[Edit3]"x"是一个例如..
<mySeg Quick="1" Brown="Two" Fox="None" Jumps="2016_En" Lazy="100" Dogs="Source"> // I do not want this XElement
Run Code Online (Sandbox Code Playgroud)
要么
<mySeg Quick="2" Brown="Ten"> // Nah.
Run Code Online (Sandbox Code Playgroud)
要么
<mySeg Quick="3"> // yes, this is one I'm looking for.
Run Code Online (Sandbox Code Playgroud)
[EDIT3]
[编辑4]我想,我必须使用这个.实际上,这是我在这篇文章之前使用的那个.我一眼就好了.
x.Attributes().Contains(x.Attribute("Quick")) && x.Attributes().Count() == 1 //thanks Ryan
Run Code Online (Sandbox Code Playgroud)
[Edit4]
如果要确保它包含一个且只包含一个属性列表,并且可以创建所关注的属性列表,则可以将其与要检查的对象相交,并查看交叉点是否只是一个项目:
var attributesICareAbout = new List<Attribute>
{
AllAttributes.Attribute("Quick"),
AllAttributes.Attribute("Brown"),
AllAttributes.Attribute("Fox"),
AllAttributes.Attribute("Jumps"),
AllAttributes.Attribute("Lazy"),
AllAttributes.Attribute("Dogs")
};
// To get all items that have only a single attribute from our list and no others:
.Where(x => x.Attributes().Intersect(attributesICareAbout).Count == 1);
Run Code Online (Sandbox Code Playgroud)
要获取具有特定属性而没有其他属性的项目:
// To get all the items who have only a single "Quick" attribute:
.Where(x => x.Attributes().Count(a => a == AllAttributes.Attribute("Quick")) == 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |