Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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# Google驱动API Q逻辑子句顺序_C#_Google Drive Api - Fatal编程技术网

C# Google驱动API Q逻辑子句顺序

C# Google驱动API Q逻辑子句顺序,c#,google-drive-api,C#,Google Drive Api,因此,我在尝试列出驱动器中的某些文件时遇到问题,原始代码是: var request = _DriveService.Files.List(); request.Q = $"name = '{Properties.Settings.Default.SomeFileName0}'" + $" or name = '{Properties.Settings.Default.SomeFileName1}'" + $" or name = '{Properties.Set

因此,我在尝试列出驱动器中的某些文件时遇到问题,原始代码是:

var request = _DriveService.Files.List();
request.Q = $"name = '{Properties.Settings.Default.SomeFileName0}'" +
        $" or name = '{Properties.Settings.Default.SomeFileName1}'" +
        $" or name = '{Properties.Settings.Default.SomeFileName2}'" +
        $" or name = '{Properties.Settings.Default.SomeFileName3}'" +
        " and trashed = false" +
        $" and '{Properties.Settings.Default.MyParents[0]}' in parents";
request.Fields = "files(id, name, parents)";
var files = await request.ExecuteAsync();
问题是它返回了12个文件,而不是4个文件。经过一点测试和调整后,我意识到google drive忽略了
子句,所以它正在检索所有删除的文件

现在,有了这段代码,它就像一个符咒:

var parentsTrashed = $"and '{Properties.Settings.Default.Myparents[0]}' in parents and trashed = false";
var request = _DriveService.Files.List();
request.Q = $"name = '{Properties.Settings.Default.SomeFileName0}' {parentsTrashed}" +
    $" or name = '{Properties.Settings.Default.SomeFileName1}' {parentsTrashed}" +
    $" or name = '{Properties.Settings.Default.SomeFileName2}' {parentsTrashed}" +
    $" or name = '{Properties.Settings.Default.SomeFileName3}' {parentsTrashed}";
request.Fields = "files(id, name, parents)";
var files = await request.ExecuteAsync();
因此,
s和
s子句的顺序应该是:
(name和and)或(name和and)或…


我在文档或互联网上都找不到这方面的任何迹象:这是一个bug还是有意的?它是不是应该在文档中记录下来,或者是我没有找到它,或者是我现在还不知道(我是一个业余爱好者)的标准东西?

虽然我不知道驱动器查询中运算符优先级的具体规则,但如果您使用括号指定您的意思,至少会更容易阅读:

var请求=_DriveService.Files.List();
request.Q=$“(name='{Properties.Settings.Default.SomeFileName0}'”+
$“或名称=“{Properties.Settings.Default.SomeFileName1}”+
$“或名称=“{Properties.Settings.Default.SomeFileName2}”+
$“或名称='{Properties.Settings.Default.SomeFileName3}')”+
“和垃圾=错误”+
父项中的“$”和“{Properties.Settings.Default.MyParents[0]}”;
request.Fields=“文件(id、名称、父项)”;
var files=wait request.ExecuteAsync();
这样,查询将采用以下形式:

(name = name1 or name = name2 or name = name3 or name = name4)
and trashed = false and parentid in parents
(当然,没有换行符。)

我怀疑在您当前的查询中,它实际上是:

name = name1 or name = name2 or name = name3 or
(name = name4 and trashed = false and parentid in parents)

我倾向于臭虫。但我打电话给谷歌的某个人,看他是否会回答,他会知道得更清楚。我至少建议用括号来说明你的优先顺序。有可能它正在测试它为
name=name1或name=name2或name=name3或(name=name4和trashed=false和parentid在parents中)
我怀疑你想要
(name=name1或name=name2或name=name3或name=name4)和trashed=false和parentid在parents中
@jonsket是的,我也这么认为,但我没有意识到我可以使用括号:oops。那么这可能也会起作用:
(name=name1或name2=name2)和trashed=false以及parentid在parents中的作用
?我会试试的。是的,我试过了,它很有效。。。我们同时写的。这样好多了。我会记下来的,泰。我现在会加上这个作为答案。是的。最奇怪的是,我甚至没有想过尝试括号。我不知道为什么会这样,我想。为了澄清,q parm使用了驱动器,所以这不是一个bug