ContainsAny不会返回任何结果

时间:2015-04-02 17:17:41

标签: c# linq mongodb breeze

我希望能够找到一个包含arrayOfArraysOfIds的TheType,它包含我提供的列表中的任何元素。 问题是,当我向下查询时,它不会返回任何内容。我应该使用什么样的格式或什么功能?

public class TheType
{
    public IList<IList<string>> arrayOfArraysOfIds;
}

theCollection.AsQueryable<theType>().
    Where(t => t.arrayOfArraysOfIds.ContainsAny(listOfIds));

根据ContainsAny函数的要求,listOfIds的类型为IEnumerable<IList<string>>,它是根据here所描述的列构建的。

问题是即使数据库中有一个应该返回的元素,查询也不会返回任何内容。

3 个答案:

答案 0 :(得分:0)

您可以获得更多控制权的一种方式,以及对未获得任何值的原因的可见性是明确定义您自己的ContainsAny方法,以便您可以使用调试器。我发现这种做法虽然不像使用复杂的LINQ命令那样巧妙,但却为我节省了很多头发。

    public class TheType
    {
        public IList<IList<string>> arrayOfArraysOfIds;
        public bool ContainsAny(IList<string> listOfIds)
        {
            return arrayOfArraysOfIds.Contains(listOfIds);
        }
    }

   theCollection.AsQueryable<TheType>().Where(t => t.ContainsAny(listOfIds));

答案 1 :(得分:0)

解决方案是对MongoDB进行查询而不要求breeze解释它,因为MongoDB直接支持查询。

theCollection.Find(Query.ElemMatch("listOfIds", Query.In("$elemMatch", new BsonArray(listOfIds)))).AsQueryable();

答案 2 :(得分:-1)

试试这个:

theCollection.AsQueryable&lt; TheType&gt;()。Where(t =&gt; t.arrayOfArraysOfIds.Contains(listOfIds));

...其中listOfIds被定义为通用列表

的IList&LT;串GT; listOfIds = new List&lt; string&gt;();