使用Linq和C#比较对象的子列表

时间:2014-04-04 16:33:15

标签: c# sql .net linq entity-framework

我在编写我正在编写的自定义业务对象搜索引擎时遇到问题,我希望有人可以帮助我。我会尽力描述这个问题。

以下是我正在使用的数据库表,并且正在通过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中描述的课程应用于此案例。似乎关键的区别在于我需要比较两个列表,这两个列表本身就是其他对象的属性。我错过了一些明显的东西吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

代码中的最后 Where语句是我关注的重点:

获取列表中至少有Contracts ContractEntity EntityTypeId的{​​{1}}。

d = d.Where(q =>
    q.ContractEntities.Any(conEnt => 
        search.EntityTypeIDs.Contains(conEnt.EntityTypeId)));