我在编写我正在编写的自定义业务对象搜索引擎时遇到问题,我希望有人可以帮助我。我会尽力描述这个问题。
以下是我正在使用的数据库表,并且正在通过Entity Framework 6(EDMX)访问:
Contract
------------
ContractUID
ContractDate
ContractEntity
-------------
ContractEntityUID
ContractUID
EntityTypeID
一个Contract行可以有多个ContractEntity行,因此一个Contract可以引用多个EntityTypeID。
搜索用户界面为此搜索引擎提供EntityTypeID列表以及其他搜索条件。该引擎应返回一个合同列表,该列表引用搜索请求中的任何EntityTypeID,并匹配任何其他提供的条件(例如,合同日期)。
输入搜索条件包含在这样的对象中:
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(…
}
我不清楚如何将Comparing two lists using linq to sql中描述的课程应用于此案例。似乎关键的区别在于我需要比较两个列表,这两个列表本身就是其他对象的属性。我错过了一些明显的东西吗?任何帮助将不胜感激。
答案 0 :(得分:1)
代码中的最后 Where语句是我关注的重点:
获取列表中至少有Contracts
ContractEntity
EntityTypeId
的{{1}}。
d = d.Where(q =>
q.ContractEntities.Any(conEnt =>
search.EntityTypeIDs.Contains(conEnt.EntityTypeId)));