代码之家  ›  专栏  ›  技术社区  ›  Mark

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

  •  1
  • Mark  · 技术社区  · 14 年前

    我正在使用System.Linq.Dynamic library。是否有方法使用具有一对多关系的实体。具体来说,我有三门课

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

    上面的调用给出了类2的id=1的对象的列表。如果这段关系是一对多的话,我怎么能查出来。。如何根据每个对象的第一个Bs-ie-Bs[0]项筛选对象列表。是否可以使用Linq.Dynamic进行筛选

    2 回复  |  直到 14 年前
        1
  •  1
  •   Singleton    14 年前

    DynamicQueryable.cs 有 IEnumerableSignatures接口

    此接口具有

     void Any(bool predicate);
    

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

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

    这将进行数据过滤。

        2
  •  0
  •   Adam Ralph    14 年前

    我还没有测试过你的代码,但是如果它适用于 class2.Id ,则以下内容应适用于 Id 英国标准第一项:-

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

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

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