我有一个自定义函数返回的数据集合,我可以枚举,但我不能只获得一个项目(我不理解语法):
foreach (var document in currentDoc)
{
// This works
item = document["MenuItemTeaserImage"].ToString();
}
//Doesn't work
string itemSingle = currentDoc[0]["MenuItemTeaserImage"].ToString()
如果我可以通过某种方式进行枚举,那么我可以在一个实例中访问数据吗?
答案 0 :(得分:0)
我会使用Enumerable.First
尝试使用Linqvar itemSingle = currentDoc.First()["MenuItemTeaserImage"].ToString();
for循环的可能原因是currentDoc
是IEnumerable
,它支持枚举但不支持索引访问。
如果您想访问除第一个元素之外的其他元素,可以将currentDoc
转换为数组currentDoc.ToArray()
或列表currentDoc.ToList()
答案 1 :(得分:0)
string itemSingle = currentDoc.Single()["MenuItemTeaserImage"].ToString();
如果currentDoc中只有1个项目,这将有效,如果有0或2个项目,它将抛出异常。
如果您有0或1个项目,那么您可以使用currentDoc.SingleOrDefault()代替,如果currentDoc为空,您将返回null。
如果您有多个项目,那么您可以使用currentDoc.First()或currentDoc.FirstOrDefault(),但在这种情况下,您可能想要考虑为什么您的集合中有多个项目,哪一个是'纠正'一个人使用。
答案 2 :(得分:0)
我认为,如果在您的收藏中找不到某个项目,则Single
或First
会抛出异常,这一点很重要。我倾向于SingleOrDefault
或FirstOrDefault
。第二项,我认为是误解,你想编辑你的集合中的单个项目。除非您认为在编辑之前需要抓取初始项目。
您可以采用以下几种方法:
var example = collection.ElementAt(0);
if(example != null)
collection[example].Property = value;
collection.FirstOrDefault().Property = value;
collection.SingleOrDefault().Property = value;
如果您只是喜欢该集合中的第一项:
var example = collection.ElementAt(0) as string;
var example = collection.FirstOrDefault() as string;
var example = collection.SingleOrDefault() as string;
这些是几种方法,请注意ToString
,如果值不存在则会引发异常。