条件编码中的"&&"太多了.更好的代码?

Jas*_*son -2 c# linq

以下代码按预期工作,但似乎不优雅.

.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)

如你所见,我正在检查是否

  • XElement只有一个属性
  • 此属性具有指定的名称

[编辑]我的意图是......我想确保元素只有一个属性.我的意思是在这种情况下只有"快速"属性.我知道伯爵的风格,伯爵不区分它的名字.[/编辑]

[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]

Ruf*_*s L 7

如果要确保它包含一个且只包含一个属性列表,并且可以创建所关注的属性列表,则可以将其与要检查的对象相交,并查看交叉点是否只是一个项目:

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)