2010-11-22 4 views
1

J'utilise la bibliothèque System.Linq.Dynamic. Existe-t-il un moyen d'utiliser les entités avec une relation de un à plusieurs. Pour être précis, j'ai 3 classesComment filtrer la liste des objets A en fonction du premier élément de chaque objet

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

Je peux filtrer lorsque la relation est une à une

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

l'appel ci-dessus me donne la liste des objets A dont l'id = class2 1. Comment puis-je rechercher si la relation est un à plusieurs .. Comment puis-je filtrer la liste des objets A en fonction du premier élément de Bs de chaque objet, à savoir Bs [0]. serait-il possible de filtrer à l'aide Linq.Dynamic

Répondre

1

DynamicQueryable.cs a IEnumerableSignatures Interface

Cette interface a

void Any(bool predicate); 

en utilisant cette méthode, nous pourrions filtrer les données

var reuslt=list.Where("Bs.Any(Id [email protected])",value); 

ce fera le filtrage des données.

0

Je n'ai pas testé votre code, mais si cela fonctionne pour class2.Id, alors ce qui suit devrait travailler pour le Id du premier élément Chambres d'hôtes: -

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

Si B pourrait être vide, vous pouvez alors utiliser

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