如何按子列表属性过滤对象?

时间:2015-07-28 05:45:51

标签: c# linq

我想通过它的子列表属性过滤主对象,想象我有两个类如下:

selfRef

然后有A的实例,它有10个B实例作为属性。然后我想返回一个具有Date大于Date.Now。

的属性的对象

应该提到我想为动态对象做这件事,所以我不能专门为对象A&创建代码。 B.我希望Expression对象适用于对象A,然后过滤Bs列表。

class A
{
   public List<B> Bs{get;set;}
}

class B 
{

   public DateTime Date{get;set;}
}

希望很清楚。

2 个答案:

答案 0 :(得分:0)

如果我正确地回答了这个问题,我会尝试这样的事情:

A Filter(A a, Func<B, bool> expr)
{
    return new A {Bs = a.Bs.Where(expr).ToList()};
}

编辑:由于我试图理解这个问题,我必须提出建议:

public A Filter(A a, Func<A, Func<B, bool>, A> expr, Func<B, bool> selector)
{
    return expr.Invoke(a, selector);
}

并将其调用为:

Filter(new A(), (a, func) => new A {Bs = a.Bs.Where(func).ToList()}, b => b.Date > DateTime.Now);

答案 1 :(得分:0)

使用位置

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            var results = a.Bs.Where(x => x.Date > DateTime.Now.AddDays(30));
        }
    }
    public class A
    {
        public List<B> Bs { get; set; }
    }

    public class B
    {
        public DateTime Date { get; set; }
    }
}
​