Linq 如何根据每个对象的第一项筛选对象列表
我正在使用System.Linq.Dynamic库。是否有一种方法可以使用具有一对多关系的实体。具体来说,我有三门课Linq 如何根据每个对象的第一项筛选对象列表,linq,Linq,我正在使用System.Linq.Dynamic库。是否有一种方法可以使用具有一对多关系的实体。具体来说,我有三门课 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 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。如何搜索关系是否为一对多。。如何根据每个对象的第一项Bs ie Bs[0]筛选对象列表。是否可以使用Linq.Dynamic进行过滤?我还没有测试您的代码,但是如果它适用于class2.Id,那么下面应该适用于Bs中第一项的Id:-
result=Select<A>("Bs[0].ElementAt(0)",1);
如果Bs可以为空,那么您可以使用
result=Select<A>("Bs[0].ElementAtOrDefault(0)",1);
我还没有测试您的代码,但是如果它适用于class2.Id,那么下面的代码应该适用于Bs中第一项的Id:-
result=Select<A>("Bs[0].ElementAt(0)",1);
如果Bs可以为空,那么您可以使用
result=Select<A>("Bs[0].ElementAtOrDefault(0)",1);
DynamicQueryable.cs具有
IEnumerableSignatures接口
此接口具有
void Any(bool predicate);
使用这种方法我们可以过滤数据
var reuslt=list.Where("Bs.Any(Id =@0)",value);
这将对数据进行过滤。DynamicQueryable.cs
IEnumerableSignatures接口
此接口具有
void Any(bool predicate);
使用这种方法我们可以过滤数据
var reuslt=list.Where("Bs.Any(Id =@0)",value);
这将对数据进行过滤