我已尝试过两种形式的通话,这一次
products = DocumentSession.Query<Product>()
.Statistics(out stats)
.Where(p => p.INFO2.StartsWith(term1))
.Where(p => p.INFO2.StartsWith(term2))
.Where(p => p.INFO2.StartsWith(term3))
.OrderByField(columnToSortBy, columnToSortByAsc)
.Skip(pageIndex * pageSize)
.Take(pageSize)
.ToList()
;
这样
products = DocumentSession.Query<Product>()
.Statistics(out stats)
.Where(p => p.INFO2.StartsWith(term1) & p.INFO2.StartsWith(term2) & p.INFO2.StartsWith(term3))
.OrderByField(columnToSortBy, columnToSortByAsc)
.Skip(pageIndex * pageSize)
.Take(pageSize)
.ToList()
;
第一个返回的记录更符合我的期望,而秒似乎返回所有类型为Product的文档。从LINQ表达式的观点来看,2之间有什么区别,我忽略了任何可能否定我想要完成的事情,这是一个3项查询,每个术语都是AND在一起。
编辑:每个Russ的修订代码。
string t1 = terms[0];
string t2 = terms[1];
string t3 = terms[2];
products = DocumentSession.Query<Product>()
.Statistics(out stats)
.Where(p => p.INFO2.StartsWith(t1) && p.INFO2.StartsWith(t2) && p.INFO2.StartsWith(t3))
.OrderByField(columnToSortBy, columnToSortByAsc)
.Skip(pageIndex * pageSize)
.Take(pageSize)
.ToList()
;
编辑2:这是你在键盘或任何其他固体物体上砸碎的地方......要用标准的C#和和或
回到基础谢谢你, 斯蒂芬
答案 0 :(得分:2)
在第二个区块,你正在做一个&amp;而不是&amp;&amp;因此,它不是进行AND比较,而是尝试进行按位操作。
编辑:在第二种情况下,您可以更改此内容:
.Where(p => p.INFO2.StartsWith(terms[0]) & p.INFO2.StartsWith(terms[1]) & p.INFO2.StartsWith(terms[2]))
到此:
.Where(p => p.INFO2.StartsWith(terms[0]) && p.INFO2.StartsWith(terms[1]) && p.INFO2.StartsWith(terms[2]))
这使得它成为正确的条款。
第二次编辑:如果这是一个AND操作,那么你不需要3个术语 - 你需要一个术语,否则你将与同一个字符串的3个实例进行比较。
terms[0] = "test";
terms[1] = "test";
terms[2] = "test";
.Where(p => p.INFO2.StartsWith(terms[0]) && p.INFO2.StartsWith(terms[1]) && p.INFO2.StartsWith(terms[2]))
与
相同string term = "test";
.Where(p => p.INFO2.StartsWith(term) && p.INFO2.StartsWith(term) && p.INFO2.StartsWith(term))
提到这一点可能会使您的代码在未来难以维护。