我有3张桌子
国家| eProfile
文件(文件集)
输入| ExpiryDate |国家
我正在尝试在搜索API中获取eTrips的集合。 eTrip需要满足几个条件。
每位员工可以持有多份文件(签证,护照等)。要使eTrip有效,我们需要确保eTrip.Country!=有效护照(未来有效期)文件的国家/地区。
我们如何编写lambda表达式来实现这一目标?
到目前为止我的代码是这样的
var query = context.eTrip.AsQueryable();
query = query.Where(e => e.validTrip == true);
var docs = query.Select(e => e.eProfile.Documents);
foreach (Documents d in docs)
{
if (d.DocumentTypeCode == "Passport" && d.ExpiryDate != null && d.ExpiryDate > DateTime.Now)
{
query = query.Where(e => e.Country != d.Country);
}
}
我现在需要为国家编写过滤器,我不知道如何为集合创建过滤器。
答案 0 :(得分:1)
您可以使用Documents
上的Any子查询扩展您的Where子句query = query.Where(e => e.validTrip == true && e.eProfile.Documents.Any(a=>a.DocumentTypeCode == "Passport" && a.ExpiryDate.HasValue && a.ExpiryDate.Value > DateTime.Now && e.Country!=d.Country));
答案 1 :(得分:0)
试试:
// your part
var query = context.eTrip.AsQueryable();
query = query.Where(e => e.validTrip == true);
var docs = query.Select(e => e.eProfile.Documents);
// get countries for which there are no documents with future date
var myCountryQuery = query.Where(x => !docs
.Where(d => d.DocumentTypeCode == "Passport" && d.ExpiryDate != null && d.ExpiryDate > DateTime.Now)
.Any(d => d.Country != x.Country)
);