如何根据每个对象的第一个项目筛选A对象列表

时间:2010-11-22 18:00:58

标签: linq

我正在使用System.Linq.Dynamic库。有没有办法使用具有一对多关系的实体。具体来说,我有3个班级

class A
{
    public int Id {get;set;}
    ...
    ...

    public Class2 class2 {get;set;}

    public ICollection<Another> Bs{get;set;}
}

class Class2
{
    public int Id{get;set;}
}
class Another
{
    public int Id {get;set;}
}

我可以在关系是一对一时过滤

public IQueryable<T> Select<T>(string condition,object value)
{
    var list=FindAll<T>();//return list of T from database
    var result=list.Where(string.Format("{0} = @0",condition),value);
}

result=Select<A>("class2.Id",1);

上面的调用给出了class2的id = 1的A对象列表。我如何搜索关系是一对多...我如何基于每个对象的第一项Bs即Bs [0]过滤A对象的列表。是否可以使用Linq.Dynamic进行过滤

2 个答案:

答案 0 :(得分:1)

DynamicQueryable.cs有     IEnumerableSignatures接口

此界面有

 void Any(bool predicate);

使用这种方法我们可以过滤数据

 var reuslt=list.Where("Bs.Any(Id =@0)",value);

这将对数据进行过滤。

答案 1 :(得分:0)

我尚未测试您的代码,但如果它适用于class2.Id,则以下内容适用于Bs中第一项的Id: -

result=Select<A>("Bs[0].ElementAt(0)",1);

如果Bs可能为空,那么你可以使用

result=Select<A>("Bs[0].ElementAtOrDefault(0)",1);