我想通过它的子列表属性过滤主对象,想象我有两个类如下:
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;}
}
希望很清楚。
答案 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; }
}
}