我在为我正在编写的自定义业务对象搜索引擎制定查询时遇到问题,我希望这里有人可以帮助我。 我会尽力描述这个问题。
以下是我正在使用并通过实体框架 6 (EDMX) 访问的数据库表:
Contract
------------
ContractUID
ContractDate
ContractEntity
-------------
ContractEntityUID
ContractUID
EntityTypeID
一个协定行可以有多个协定实体行,因此一个协定可以引用多个实体类型 ID。
除其他搜索条件外,搜索用户界面为此搜索引擎提供实体类型 ID 列表。 引擎应返回合同列表,这些合同引用搜索请求中的任何实体类型 ID 并匹配任何其他提供的条件(例如合同日期)。
输入搜索条件包装在如下所示的对象中:
SearchCriteria
{
DateTime? ContractDate;
List<int> EntityTypeIDs;
}
以下是我到目前为止已经完成的一些示例代码:
var d = entities.Contracts.Where(q => q.ContractUID > 0);
if(search.ContractDate.HasValue)
d = d.Where(q => q.ContractDate == search.ContractDate);
if(search.EntityTypeIDs != null)
{
d = d.Where(q => q.ContractEntities.Select(q2 => q2.EntityTypeID).Any(search. EntityTypeIDs.Select(i).Contains(…
}
我不清楚的是如何将使用 linq to sql 比较两个列表中描述的课程应用于这种情况。 似乎很关键的区别是我需要比较两个列表,它们本身就是其他对象的属性。 我在这里错过了一些明显的东西吗? 任何帮助将不胜感激。
代码中的最后一个 Where 语句是我关注的:
获取列表中至少有 1 个ContractEntity
EntityTypeId
的Contracts
。
d = d.Where(q =>
q.ContractEntities.Any(conEnt =>
search.EntityTypeIDs.Contains(conEnt.EntityTypeId)));