LINQ:从IQueryable中删除项

5
我希望在使用LINQ查询结果进行数据绑定之前,从中删除一项。请问应该采用什么正确的方法?
我的问题是如何处理下面这个示例中的 foreach 循环。示例如下:
var obj =
    (from a in dc.Activities
    where a.Referrer != null
    && a.Referrer.Trim().Length > 12
    && a.Session.IP.NumProblems == 0
    && (a.Session.UID == null || a.Session.UID < 1 || a.Session.User.BanLevel < 1)
    select a)
    .Take(int.Parse(ConfigurationManager.AppSettings["RecentItemQty"]));
foreach (Activity act in obj)
    if (isDomainBlacklisted(ref dc, act.Referrer))
        obj.Remove(act);
2个回答

8
你不需要使用foreach,你可以直接使用这个...
obj.RemoveAll(act => isDomainBlackListed(ref dc, act.Referrer));

3

在查询的末尾添加它,以在它们进入结果之前过滤掉它们:

var obj =
   (from a in dc.Activities
   where a.Referrer != null
   && a.Referrer.Trim().Length > 12
   && a.Session.IP.NumProblems == 0
   && (a.Session.UID == null || a.Session.UID < 1 || a.Session.User.BanLevel < 1)
   select a)
   .Take(int.Parse(ConfigurationManager.AppSettings["RecentItemQty"]))
   .Where(a => !isDomainBlacklisted(ref dc, a.Referrer));

如果您想要其他项目替换过滤掉的项目,则可以在Take之前放置Where,但这意味着需要更多调用isDomainBlacklisted。

没错,就是这样。实际上我把它放在了datasource=那一行里。 - tsilb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接