2012-03-28 12 views
1

Angesichts der follwing:Linq to EF Dynamische Suche mit mehreren Eigenschaften

SQL-Tabellen:

Names 
----- 
Id (int) 
FirstName (varchar) 
LastName (varchar) 

NameProperties 
---------- 
Id (int) 
NameId (int) FK to Names Id 
PropType (int) 
PropValue (int) 

Jeder Name kann mehrere NameProperties haben

Nun meine such Klasse ist als

public string FirstName { get; set; } 
public string LastName { get; set; } 
public List<KeyValuePair<int,int>> Properties { get; set; } Corresponding to a list of PropType ProValue 
folgt

Wie suche ich mit Linq zu EF, wenn mehrere PropType & PropValues?

+1

ok ... können Sie weitere Details hinzufügen, was Sie hier erreichen möchten? – NiK

+0

@NiK Ich versuche, Namen mit einem bestimmten Vornamen und Nachnamen eine Liste von PropType & PropValue zu suchen –

+1

Ist die 'Any'-Erweiterung nicht für Sie arbeiten? Kannst du zeigen, was du probiert hast? –

Antwort

1

der Annahme, dass die Kriterien in Properties alle erfüllt sein sollten (das heißt AND und nicht OR) können Sie dies tun:

// c is a searchCriteria object. 
var query = context.Names 
    .Where(n => n.FirstName == c.FirstName && n.LastName == c.LastName); 
foreach(var pair in c.Properties) 
{ 
    query = query.Where(n => n.NameProperties.Any(np => 
     np.PropType == pair.PropType && np.PropValue == pair.PropValue; 
} 

(nicht für Syntax geprüft, nur die Idee zeigt).

Es ist nicht sehr effizient, auf diese Weise abzufragen, aber eine Entity–attribute–value model Abfrage ist immer ein Schmerz. Wenn es sogar nur entfernt möglich ist, die Name-Tabelle so zu ändern, dass sie Spalten enthält, die den NameProperties entsprechen, dann tun Sie es.

+0

Ich sehe, du hast das nicht akzeptiert. OK mit mir, aber kann ich etwas verbessern? –

+0

Ich habe es wieder akzeptiert, ich habe es aus Versehen gemacht! Ich teste gerade etwas und ich gebe dir wieder mein Feedback! Danke –

+0

Okay, es gibt ein Problem damit, wenn Names mehrere Eigenschaften hat Es gibt das gleiche n Ergebnis durch die Anzahl n Eigenschaften zurück –

Verwandte Themen