具有多个属性的Linq到EF动态搜索

时间:2012-03-28 00:28:14

标签: c# sql linq entity-framework search

鉴于以下内容:

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&amp;时,如何使用linq搜索到EF? PropValues?

1 个答案:

答案 0 :(得分: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总是很痛苦。如果甚至可以远程更改Name表,使其包含与NameProperties对应的列,则执行此操作。