2009-07-02 4 views
1

Ich arbeite an der folgenden LINQ-Abfrage:Wie kann ich die "Where" -Klausel in der folgenden LINQ to SQL Query schreiben?

public void GetAuditRuleAgencyRecords(IEnumerable<Entities.AuditRule> rules) 
{ 
    using (LinqModelDataContext db = new LinqModelDataContext()) 
    { 
     var auditAgencyRecords = (from ag in db.Agencies 
         join ara in db.AuditRuleAccounts on ag.Agency_Id equals ara.AgencyID 
         join arr in db.AuditRuleResults on ara.AuditRuleAccountID equals arr.AuditRuleAccountID 
         join are in db.AuditRuleEnterprises on arr.AuditRuleEnterpriseID equals are.AuditRuleEnterpriseID 
         select new 
         { 

          AgencyID = ag.Agency_Id, 
          AgencyName = ag.Agency_Name, 
          AuditRuleEnterpriseID = arr.AuditRuleEnterpriseID, 
          CorrectedDate = arr.CorrectedDate, 
          NbrDaysToCorrect = arr.NbrDaysToCorrect,  

         }).ToList(); 
    } 
} 

Sie sehen, dass ich in einem IEnumerable Regeln bin vorbei. Jedes AuditRule-Objekt, das ich übergebe, hat eine Eigenschaft namens "ID".

Wie würde meine WHERE-Klausel für diese Abfrage aussehen, wenn ich sagen möchte, nur die Datensätze zurückgeben, wo die Tabellenspalte AuditRuleEnterprise.AuditID mit einer der IDs in meiner Regel "ID" -Eigenschaft übereinstimmt (die Objekte, die ich habe in die Methode übernommen)?

Antwort

4

Versuchen:

.Where(rules.Select(r => r.ID).Contains(arr.AuditRuleEnterpriseID.AuditID)) 

oder in Abfragesyntax

where rules.Select(r => r.ID).Contains(arr.AuditRuleEnterpriseID.AuditID) 
+0

Tat LINQ to SQL erweitert, dass ein in Ausdruck. – Richard

+0

danke jason. Ich schätze es. – KingNestor