Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 如何根据每个对象的第一项筛选对象列表_Linq - Fatal编程技术网

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

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

我正在使用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 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);
这将对数据进行过滤