Sha*_*tin 4 c# linq orchardcms orchardcms-1.8
我们如何检索第一项WhereSelectListIterator?通常,我使用foreach循环来迭代.有没有办法称相当于myResult[0]或myResult.FirstOrDefault().两者都抛出错误.myResult.ToList()也不起作用.我开始认为我们唯一可以做的WhereSelectListIterator就是迭代了foreach.
这是场景:我创建了一个带有Shape布局的Orchard Query.形状模板包含以下代码:
@{
// content items is of type WhereSelectListIterator<T,T>
var contentItems = Model.ContentItems;
dynamic firstItem = null;
// {"Cannot apply indexing with [] to an expression of type 'object'"}
//// firstItem = contentItems[0];
// {"'object' does not contain a definition for 'ToList'"}
// var items = contentItems.ToList();
// get the title of the first content item
// this is what DOES work
foreach (var contentItem in contentItems)
{
firstItem = contentItem;
break;
}
}
<h2>@(firstItem != null ? firstItem.TitlePart.Title : "Got Nothing")</h2>
Run Code Online (Sandbox Code Playgroud)
具体来说,contentItems是类型
System.Linq.Enumerable.WhereSelectListIterator<
Orchard.Projections.Descriptors.Layout.LayoutComponentResult,
Orchard.ContentManagement.ContentItem>
Run Code Online (Sandbox Code Playgroud)
如果您需要有关我可能想要检索第一项的原因的详细信息,请与我们联系.
问题是你有一个动态对象,你试图使用的LINQ方法(ToList,FirstOrDefault)是扩展方法IEnumerable<T>.DLR在运行时没有足够的信息来解析扩展方法,就像实例方法一样.由于扩展方法实际上只是附加了特殊属性的静态方法,因此您也可以在静态样式中调用它们:
var contentItems = Model.ContentItems;
dynamic firstItem = System.Linq.Enumerable.FirstOrDefault(contentItems);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2546 次 |
| 最近记录: |