鉴于以下内容:
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?
答案 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对应的列,则执行此操作。