不在集合中的Lambda表达式

时间:2015-08-19 19:31:00

标签: c# linq lambda

我有3张桌子

eTrip

国家| eProfile

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);
            }
        }

我现在需要为国家编写过滤器,我不知道如何为集合创建过滤器。

2 个答案:

答案 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)
            );