2009-04-04 40 views
5

LINQクエリの結果からアイテムを削除してから、データバインドに使用します。これを行う適切な方法は何ですか?LINQ:IQueryableからアイテムを削除する

私のイラストのforeachは私の質問の話題です。イラスト:あなたはちょうどこれを使用することができます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); 

答えて

8

...

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)); 

あなたが除外するものを置き換えるために、他のアイテムが必要な場合は、TakeWhereを置くことができますが、それはisDomainBlacklistへのより多くの呼び出しを意味しますもちろん。

+0

ええ、それは私がやったことです。実際には私はそれをデータソース=行に入れました。 – tsilb

関連する問題