访问 IEnumerable 中的特定属性
Accessing Specific Properties Inside IEnumerable
我正在尝试查询 XML 文档和 return 存储在 METEDATA 标记内的 COUNT 标记中的计数。问题是我很难访问 属性 strCount 以在程序中使用。我考虑过遍历 IEnumerable,但希望能够以更简洁的方式访问他的值。比如returncountQ.strCount我们的countQ["strCount"]。我知道这些在这种情况下不起作用,但想说明使用 属性 的名称的愿望我想要的值而不是索引或循环。
代码
Private XDocument doc = XDocument.Load(path);
public class entityCount
{
public string strCount { get; set; }
}
public IEnumerable<entityCount> queryCount(){
var countQ = this.doc.Descendants("METADATA") .Select(m => new entityCount {
strCount = m.Element("COUNT").Value
});
return countQ.....?;
}
缩写 XML
<PRODUCTION_SET>
<METADATA>
<COUNT>322</COUNT>
</METADATA>
<ENTITY>
<METADATA>
<ID>1</ID>
<foo>x</foo>
<bar>y</bar>
</METADATA>
</ENTITY>
.
.
.
.
.
<ENTITY>
<METADATA>
<ID>322</ID>
<foo>x</foo>
<bar>y</bar>
</METADATA>
</ENTITY>
</PRODUCTION_SET>
您可以获得 IEnumerable<T>
using First()
or FirstOrDefault()
的第一项,例如:
var queryCountResult = countQ.FirstOrDefault();
if(queryCountResult !=null)
{
var count = queryCountResult.strCount;
}
您可以将 IEnumerable 转换为列表并通过其索引访问元素:
int cnt = countQ.ToList()[0].strCount;
return cnt;
问题是,您的查询是否只 return 一项?如果你知道你只有一个项目,你可以只使用 First()
:
int cnt = countQ.First().strCount;
return cnt;
要获取第一个元数据标记中的计数,您可以这样做:countQ.First()
如果您只对 PRODUCTION_SET 中的元数据标签感兴趣,您可能不应该使用 Descendants(这会更深入地寻找它,即使在单个实体中,忽略上下文),但是而是找到 PRODUCTION_SET 标签,然后执行 .Elements().Select(...).Single()
。 Single() 几乎与 First() 相同,但它将确保只有一个元素是您要查找的。在这种情况下,代码将如下所示:
public entityCount queryCount(){
return this.doc.Root.Elements("METADATA").Select(m => new entityCount {
strCount = m.Element("COUNT").Value
}).Single();
}
我正在尝试查询 XML 文档和 return 存储在 METEDATA 标记内的 COUNT 标记中的计数。问题是我很难访问 属性 strCount 以在程序中使用。我考虑过遍历 IEnumerable,但希望能够以更简洁的方式访问他的值。比如returncountQ.strCount我们的countQ["strCount"]。我知道这些在这种情况下不起作用,但想说明使用 属性 的名称的愿望我想要的值而不是索引或循环。
代码
Private XDocument doc = XDocument.Load(path);
public class entityCount
{
public string strCount { get; set; }
}
public IEnumerable<entityCount> queryCount(){
var countQ = this.doc.Descendants("METADATA") .Select(m => new entityCount {
strCount = m.Element("COUNT").Value
});
return countQ.....?;
}
缩写 XML
<PRODUCTION_SET>
<METADATA>
<COUNT>322</COUNT>
</METADATA>
<ENTITY>
<METADATA>
<ID>1</ID>
<foo>x</foo>
<bar>y</bar>
</METADATA>
</ENTITY>
.
.
.
.
.
<ENTITY>
<METADATA>
<ID>322</ID>
<foo>x</foo>
<bar>y</bar>
</METADATA>
</ENTITY>
</PRODUCTION_SET>
您可以获得 IEnumerable<T>
using First()
or FirstOrDefault()
的第一项,例如:
var queryCountResult = countQ.FirstOrDefault();
if(queryCountResult !=null)
{
var count = queryCountResult.strCount;
}
您可以将 IEnumerable
int cnt = countQ.ToList()[0].strCount;
return cnt;
问题是,您的查询是否只 return 一项?如果你知道你只有一个项目,你可以只使用 First()
:
int cnt = countQ.First().strCount;
return cnt;
要获取第一个元数据标记中的计数,您可以这样做:countQ.First()
如果您只对 PRODUCTION_SET 中的元数据标签感兴趣,您可能不应该使用 Descendants(这会更深入地寻找它,即使在单个实体中,忽略上下文),但是而是找到 PRODUCTION_SET 标签,然后执行 .Elements().Select(...).Single()
。 Single() 几乎与 First() 相同,但它将确保只有一个元素是您要查找的。在这种情况下,代码将如下所示:
public entityCount queryCount(){
return this.doc.Root.Elements("METADATA").Select(m => new entityCount {
strCount = m.Element("COUNT").Value
}).Single();
}