我是Parse.com的新手,我遇到了一些问题。我试图从数据库中获取布尔Deleted
等于false
的所有记录。但这似乎并没有任何作用。
例如:
ParseQuery<ParseObject> query = ParseObject.GetQuery("Horse");
query.WhereEqualTo("Deleted", "false");
IEnumerable<ParseObject> horses = await query.FindAsync();
当我用三条记录运行时,其中两条记录是假的,一条是真的,我仍然得到所有三条记录。这是我的测试数据: 我已经为此查询尝试了多种方法,例如:
query.WhereNotEqualTo("Deleted", "true");
query.WhereNotEqualTo("Deleted", true);
query.WhereEqualTo("Deleted", false);
但这些似乎都不起作用。我究竟做错了什么?我希望保留Boolean
字段和这些查询。另一个奇怪的事情是,当我创建自己的查询并创建一个整数字段时,例如搜索&#39;过滤器&#39;做的工作:
var query2 = from gameScore in ParseObject.GetQuery("Horse")
where gameScore.Get<string>("Removed") == "1"
select gameScore;
IEnumerable<ParseObject> results = await query2.FindAsync();
那么为什么这会有用,但ParseQuery
却没有?我想要写一个ParseQuery
只能获取与false匹配的记录,或者自己写一个与之匹配的查询。
更新 每个请求添加了新的查询样本。 &#34;&#34;
之间的封装值ParseQuery<ParseObject> query = ParseObject.GetQuery("Horse");
query.WhereEqualTo("Deleted", "false");
IEnumerable<ParseObject> horses = await query.FindAsync();
没有&#34;&#34;对于虚假陈述:
ParseQuery<ParseObject> query = ParseObject.GetQuery("Horse");
query.WhereEqualTo("Deleted", false);
IEnumerable<ParseObject> horses = await query.FindAsync();
即使Deleted
为真,这两个值都会返回所有值。
谢谢, Yenthe
答案 0 :(得分:0)
如果您的列属于Boolean
类型,那么whereEqualTo("Deleted", false)
和whereNotEqualTo("Deleted", true)
应该可以正常工作。虽然字符串版本不起作用,或者可以使用&#34; truthy / falsey&#34;逻辑(虽然我认为这只是JavaScript,而不是C#)。
使用原生C#bool值而不是字符串再次尝试查询。
答案 1 :(得分:0)
应该在WhereEqualTo()中大写?没有阅读api文档,但通常使用驼峰案例。
答案 2 :(得分:0)
您的查询的问题是您在添加其他过滤器后未存储查询。添加过滤器时,会修改查询并返回,并且需要将此返回值指定为新查询。
...
query = query.WhereEqualTo("Deleted", false);
...
请注意,您可以链接查询过滤器,因此您的代码代码可以修改为:
ParseQuery<ParseObject> query = ParseObject.GetQuery("Horse")
.WhereEqualTo("Deleted", false);
IEnumerable<ParseObject> horses = await query.FindAsync();
只要过滤器不会相互冲突,您就可以根据需要链接任意数量的查询过滤器。 (您必须查看兼容过滤器的文档)
不得不重新分配可能看起来像一种奇怪的方法,但我想这样你就可以用许多常见的过滤器创建一个单一的基本查询,然后轻松地分出更多的利基选项:
// Create a base query
var baseQuery = new ParseQuery<Horse>();
// Add many common filters
var removedHorses = query.WhereEqualTo("Deleted", true);
var remainingHorses = query.WhereEqualTo("Deleted", false);
var sickHorses = query.WhereEqualTo("Health", "Sick");
// And so on
答案 3 :(得分:0)
试试这种方式
ParseQuery<ParseObject> query = ParseObject.GetQuery("Horse");
IEnumerable<ParseObject> horses = await query.WhereEqualTo("Deleted", "false").FindAsync();
它对我有用,如下例所示:
ParseQuery<Classes.PermissoesGerenciarMedicos> queryPermissoesMedicos = new ParseQuery<Classes.PermissoesGerenciarMedicos>();
queryPermissoesMedicos.WhereEqualTo("usuario", ParseUser.CurrentUser as Classes.Usuario).FindAsync().ContinueWith(resultado => {
if (resultado.IsCompleted && !resultado.IsFaulted)
{
if (resultado.Result.Count() == 1)
{
permissoesGerenciarMedicos = resultado.Result.ElementAt(0) as Classes.PermissoesGerenciarMedicos;
carregaPermissoesUsuarios();
}
else
{
MessageBox.Show("Erro ao carregar as permissões do usuário", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
processandoDadosDelegate processandoDadosD = new processandoDadosDelegate(processandoDados);
this.Invoke(processandoDadosD, new object[] { false });
}
} else
{
MessageBox.Show("Erro ao carregar as permissões do usuário", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
processandoDadosDelegate processandoDadosD = new processandoDadosDelegate(processandoDados);
this.Invoke(processandoDadosD, new object[] { false });
}
});