我有两个IEnumerable对象,如果满足特定条件,则需要将每个元素从第一个IEnumerable转换为第二个IEnumerable。我的代码是这样的
IEnumerable<IPublishedContent> nodesTemp = posts.Take(10).ToList();
IEnumerable<IPublishedContent> nodes = null;
foreach (var n in nodesTemp)
{
if (condition=true)
{
nodes.add(n);
}
}
但这会引发错误
:'System.Collections.Generic.IEnumerable <Umbraco.Core.Models.IPublishedContent>'不包含'add'的定义,也没有扩展方法'add'接受类型为'System.Collections.Generic.IEnumerable <的扩展名可以找到Umbraco.Core.Models.IPublishedContent>(您是否缺少using指令或程序集引用?)
完整代码供参考
IEnumerable<IPublishedContent> nodesTemp = posts.Take(count).ToList();
IEnumerable<IPublishedContent> nodes = null;
foreach (IPublishedContent n in nodesTemp)
{
var rolename = n.GetProperty("focusedUserGroup").Value.ToString();
var username = umbraco.cms.businesslogic.member.Member.GetCurrentMember().Text;
var flag = false;
if (!string.IsNullOrEmpty(rolename))
{
var groups = rolename.Split(',');
foreach (var group in groups)
{
if (Roles.IsUserInRole(username, group))
{
nodes.add(n);
break;
}
}
}
}
你做不到 原因是因为IEnumerable只是表示某个集合上的迭代器。它可以是内存中的数组,可以从远程数据库中选择,甚至可以像这样的常量调用:
IEnumerable<int> GetSomeConsts()
{
yield return 1;
yield return 101;
yield return 22;
}
您可以做的是扩展第一个集合的后迭代器。例如这样:
bool IsCondition(IPublishedContent n)
{
var rolename = n.GetProperty("focusedUserGroup").Value.ToString();
var username = umbraco.cms.businesslogic.member.Member.GetCurrentMember().Text;
if (!string.IsNullOrEmpty(rolename))
{
var groups = rolename.Split(',');
foreach (var group in groups)
{
if (Roles.IsUserInRole(username, group))
{
return true;
}
}
}
return false;
}
然后像这样调用它:
var nodes = posts.Take(count).Where(IsCondition);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句