linq关于多个值的任何子句

时间:2016-04-27 19:16:46

标签: linq

我正在尝试使用any子句创建一个linq语句来过滤otu结果。我的问题是我没有一个值可以比较。

在下面的示例中,我有一个PropertyTaxBill实体,它是父实体。每个人都附有TaxPropertyAssessmentDetails的集合。

在这个查询中,人们可以指定他们只想处理与特定类层有关的账单,所以我检查一下classStrata变量中是否存在任何值。如果是,则用户选择特定的。我试图在classStrata上做一个任何条款,但不是给它一个值来匹配我试图选择附加到PropertyTaxBill的TaxPropertyAssessmentDetails集合中的所有值。这可能吗?

using (var dataContext = contextProvider.GetContext())
{

    var query = dataContext.PropertyTaxBills.Where(x => x.Id > 1);
    var classStrata = new int[0];

    if (classStrata != null && classStrata.Any())
    {
        query = query.Where(x => classStrata.Any(y => y == x.TaxPropertyAssessmentDetails.SelectMany(z => z.PropertyTaxClassStrataId)));
    }
}

1 个答案:

答案 0 :(得分:0)

您需要使用contains,以便ef能够转换为ef查询。 不确定我是否正确理解了您的模型。这是一个模型的例子。请告诉我,如果我理解不正确,我可以解决它。

public void TestMethod1()
{
    IEnumerable<TaxBill> TaxBills = new List<TaxBill>();

    var query = TaxBills.Where(x => x.Id > 1);
    var classStrata = new int[0];

    if (classStrata != null && classStrata.Any())
    {
        query = query.Where(x => x.AssessmentDetails.Any(ad => ad.TaxClassStrataId.Any(cs => classStrata.Contains(cs))));
    }
}

和实体

public class TaxBill
{
    public int Id { get; set; }
    public ICollection<AsessmentDetails> AssessmentDetails { get; set; }
}
public class AsessmentDetails
{
    public ICollection<int> TaxClassStrataId { get; set; }
}