我希望能够找到一个包含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所描述的列构建的。
问题是即使数据库中有一个应该返回的元素,查询也不会返回任何内容。
答案 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;();