【问题标题】:Linq to EF Dynamic Search with multiple properties具有多个属性的 Linq to EF 动态搜索
【发布时间】:2012-04-11 13:50:25
【问题描述】:

鉴于以下情况:

SQL 表:

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

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

每个名称可以有多个名称属性

现在我的 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 和 PropValues 时如何使用 linq to EF 进行搜索?

【问题讨论】:

  • 好的...您能在此处添加更多关于您要实现的目标的详细信息吗?
  • @NiK 我正在尝试搜索给定名字和姓氏的名称,列出 PropType 和 PropValue
  • Any 扩展程序不适合您吗?你能展示你的尝试吗?

标签: c# sql linq entity-framework search


【解决方案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 对应的列,那么就这样做。

【讨论】:

  • 我看到你不接受这个。没关系,但有什么我可以改进的吗?
  • 我重新接受了,我做错了!我目前正在重新测试一些东西,我会再次给你我的反馈!谢谢
  • 好吧,这有一个问题,如果 Names 有多个属性,它会返回相同的 n 结果,其数量为 n 个属性
  • 嗯,这很奇怪,它应该转换为EXISTSs,所以结果不应该相乘(就像JOIN 那样)。你能验证一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多