Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ParseQuery WhereEqualTo不过滤?_C#_Parse Platform_Xamarin - Fatal编程技术网

C# ParseQuery WhereEqualTo不过滤?

C# ParseQuery WhereEqualTo不过滤?,c#,parse-platform,xamarin,C#,Parse Platform,Xamarin,我是Parse.com的新手,遇到了一些问题。我试图从布尔deleteQuals为false的数据库中获取所有记录。但这似乎根本不起作用。 例如: ParseQuery<ParseObject> query = ParseObject.GetQuery("Horse"); query.WhereEqualTo("Deleted", "false"); IEnumerable<ParseObject> horses = await query.FindAsync(); 但

我是Parse.com的新手,遇到了一些问题。我试图从布尔deleteQuals为false的数据库中获取所有记录。但这似乎根本不起作用。 例如:

ParseQuery<ParseObject> query = ParseObject.GetQuery("Horse");
query.WhereEqualTo("Deleted", "false");
IEnumerable<ParseObject> horses = await query.FindAsync();
但这些似乎都不起作用。我做错了什么?我希望保留一个布尔字段和这些查询。另一件奇怪的事情是,当我创建自己的查询并创建一个整数字段时,例如搜索“过滤器”起作用:

var query2 = from gameScore in ParseObject.GetQuery("Horse")
             where gameScore.Get<string>("Removed") == "1"
             select gameScore;
IEnumerable<ParseObject> results = await query2.FindAsync();
对于虚假陈述,无需支付:

ParseQuery<ParseObject> query = ParseObject.GetQuery("Horse");
query.WhereEqualTo("Deleted", false);
IEnumerable<ParseObject> horses = await query.FindAsync();
这两个函数都返回所有值,即使Deleted为true

谢谢, 是如果列是布尔类型,那么whereEqualToDeleted、false和whereNotEqualToDeleted、true应该可以正常工作。但是字符串版本不起作用,或者可能使用truthy/false逻辑进行转换,尽管我认为这只是JavaScript,而不是C


请使用本机C布尔值而不是字符串重试您的查询。

W是否应在WhereEqualTo中大写?尚未阅读api文档,但通常使用camel case

查询的问题是,添加附加筛选器后,您没有存储查询。添加筛选器时,将修改并返回查询,并且需要将此返回值指定为新查询

...
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
这样试试

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 });
                }
            });

谢谢你的回答,提摩太。我也试过了,但也没用。这是代码:parsequeryquery=ParseObject.GetQueryHorse;query.WhereEqualToDeleted,false;query.WhereNotEqualToDeleted,true;我的字段是布尔值。那么这是API中的错误还是我做了其他错误的事情呢?您应该使用WhereEqualTo或WhereNotEqualTo,但不能同时使用两者。它们在处理空值的方式上略有不同。@Timotyh我只使用了一条语句。我首先尝试了WhereEqualTo,然后是WhereNotEqualTo,然后两者一起使用,但是它们都不起作用,所以这看起来好像API没有正常工作?如果您可以使用WhereEqualTo添加一个完整的查询,但对您的问题不起作用,那就太好了,因为它应该可以正常工作。我添加了两个示例,使用WhereEqualTo和都获取所有值,删除时都是true和false!来自github public ParseQuery的代码,其中equalTostring键,对象值{返回新的ParseQuerythis,其中:新字典{{key,value};}它创建一个新请求
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 });
                }
            });