2012-04-10 19 views
1

Ich habe Institution Einheiten, die eine Fund Liste als eine Eigenschaft haben.So filtern Sie Eigenschaften

Ich habe eine Liste der zulässigen Fonds getrennt.

Ich möchte Institutionen auswählen, die einen der Fonds von allowedFunds Liste haben, die leicht getan werden kann. Aber wenn ich Institutionen bekomme, möchte ich auch die Funds Liste filtern.

Mit anderen Worten habe ich Institution1 mit Fund1 und Fund2. Fund1 ist auch in allowedFunds Liste. Ich möchte Institution1 mit der Funds-Liste mit nur Fund1 zurückgeben. Ist es möglich, eine Abfrage mit Lambda-Ausdrücken für EF 4.1 zu schreiben?

// I have allowed funds in a separate list 
    IEnumerable<Fund> allowedFunds; 

    public partial class Institution 
    { 
     public int Id { get; set; } 
     public virtual ICollection<Fund> Funds { get; set; } 
    } 

    public partial class Fund 
    { 
     public int Id { get; set; } 
     public virtual Institution Institution { get; set; } 
    } 

Bearbeiten; Oki, Die Frage ist bearbeitet und auch hier ist eine andere Erklärung. Wenn Sie den Code unterhalb meines 2. Kommentars sehen (// nicht erlaubte Mittel von Institutionen entfernen), möchte ich das tun. aber dort gebe ich Institut ein und füge die Logik hinzu. Anstatt das zu tun, möchte ich Institutionen zurückgeben, nachdem ich nicht erlaubte Gelder entfernt habe. Unten ist meine Methode. Vielen Dank.

public IEnumerable<Institution> FindInstitutionsForExternalUser(IEnumerable<Fund> allowedFunds) 
    { 
     IQueryable<Institution> query = GetObjectSet(); 
     //Institutions which are connected to allowedFunds 
     if (allowedFunds != null) 
     { 
      IEnumerable<int> fundIds = allowedFunds.Select(fund => fund.Id); 
      query = query.Where(i => i.Funds.Any(o => fundIds.Any(id => id == o.Id))); ; 
     } 
     IEnumerable<Institution> list = query.ToList().OrderBy(a => a.Name); 
     //remove not allowed Funds from institutions 
     foreach (var institution in list) 
     { 
      IEnumerable<Fund> filterdFunds = 
       institution.Funds.Where(fund => allowedFunds.Any(allowedFund => allowedFund.Id == fund.Id)); 
      institution.Funds = filterdFunds.ToList(); 
     } 
     return list; 
    } 
+5

Wow, ich kann nicht folgen, was man überhaupt fragen. Kannst du deine Frage umstrukturieren? – Linger

+2

Ja, wirklich schwer, die Idee zu bekommen. Was ist deine "allowedFunds" -Liste? Geben Sie ein Beispiel und zeigen Sie, wie Sie es versucht haben. –

Antwort

0

Probieren Sie etwas wie folgt

from i in Institutes from f1 in i.Funds join f2 in AllowedFunds on f1.Id equals f2.Id select f1 
Verwandte Themen