将元素添加到IEnumerable <IPublishedContent>

没有

我有两个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章