2012-03-28 58 views
1

鑑於follwing:LINQ到EF動態搜索具有多個屬性

SQL表:

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

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

每個名稱可以有多個NameProperties

現在我searchCriteria類是如下

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 

當我有多個PropType時,如何使用linq搜索EFPropValues?

+1

好的......你可以添加更多的細節,你想在這裏實現什麼? – NiK 2012-03-28 00:35:21

+0

@NiK我試圖通過給定某個名字和姓氏名稱來搜索PropType和PropValue列表 – 2012-03-28 00:37:09

+1

「Any」擴展名不適合你嗎?你能證明你所嘗試過的嗎? – 2012-03-28 01:25:50

回答

1

假設在Properties的標準都應該被滿足(即AND而不是OR),你可以這樣做:

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

(不檢查語法,只是顯示的想法)。

這樣查詢效率不高,但查詢Entity–attribute–value model總是很痛苦。如果甚至可以遠程更改名稱表,使其包含與NameProperties相對應的列,請執行此操作。

+0

我看到你不接受這個。與我同行,但有什麼我可以改進的? – 2012-04-04 07:11:49

+0

我重新接受了,我錯了!我正在重新測試一些內容,我會再次給你我的反饋!謝謝 – 2012-04-04 07:18:08

+0

好的,這有一個問題,如果名稱有多個屬性它返回相同的n結果,它具有的數字n屬性 – 2012-04-04 08:38:02