Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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# 错误地说;类型';T';必须是引用类型“;使用表达式<;Func<;T、 布尔值>&燃气轮机;方法中的谓词_C# - Fatal编程技术网

C# 错误地说;类型';T';必须是引用类型“;使用表达式<;Func<;T、 布尔值>&燃气轮机;方法中的谓词

C# 错误地说;类型';T';必须是引用类型“;使用表达式<;Func<;T、 布尔值>&燃气轮机;方法中的谓词,c#,C#,我试图更改一个方法,使其接受表达式谓词参数。但是当我这样做的时候,它给了我一个错误 这里有一个老方法: async static Task Delete() { var F = await cosmosManager.GetDocumentItemsAsync<LogF>( x => x.Activity == "F"); await cosmosManager.DeleteDocumentItemAsync(F[0]

我试图更改一个方法,使其接受
表达式谓词
参数。但是当我这样做的时候,它给了我一个错误

这里有一个老方法:

    async static Task Delete() {
       var F = await cosmosManager.GetDocumentItemsAsync<LogF>(
            x => x.Activity == "F");
       await cosmosManager.DeleteDocumentItemAsync(F[0].Id);
    }

此外,这仅适用于检索到的第一条记录[0]。如何更改它以使其删除所有记录?

只需对类型参数应用与
GetDocumentItemsAsync
中相同的约束:

异步静态任务删除(表达式谓词),其中T:class
{
//照旧执行
}
这将确保
Delete
方法中的
T
适合
GetDocumentItemsAsync
中的
T

然后您将遇到一个问题,即属性
Id
T
中未知。您是否有指定该属性的基类或接口?如果是,请将其添加到约束中

此外,这仅适用于检索到的第一条记录[0]。我如何更改它以使其删除所有记录

您可以迭代所有结果,一次删除一个,或者如果Cosmos提供该功能,则使用批删除。(我看不到沿着这些线的任何东西。)


根据应用程序的不同,您可能希望对此进行并行处理,首先对每个项调用
DeleteDocumentItemAsync
,然后使用
Task。当所有的
等待所有生成的任务完成时。

只需对类型参数应用与
GetDocumentItemsAsync
中相同的约束:

异步静态任务删除(表达式谓词),其中T:class
{
//照旧执行
}
这将确保
Delete
方法中的
T
适合
GetDocumentItemsAsync
中的
T

然后您将遇到一个问题,即属性
Id
T
中未知。您是否有指定该属性的基类或接口?如果是,请将其添加到约束中

此外,这仅适用于检索到的第一条记录[0]。我如何更改它以使其删除所有记录

您可以迭代所有结果,一次删除一个,或者如果Cosmos提供该功能,则使用批删除。(我看不到沿着这些线的任何东西。)

根据应用程序的不同,您可能希望对此进行并行处理,首先对每个项目调用
DeleteDocumentItemAsync
,然后使用
Task.whalll
等待所有生成的任务完成

此外,这仅适用于检索到的第一条记录[0]。我如何更改它以使其删除所有记录

此代码显示为检索集合,但仅删除第一项:

var F = await cosmosManager.GetDocumentItemsAsync<T>(predicate);
await cosmosManager.DeleteDocumentItemAsync(F[0].Id);
var F=await cosmanager.GetDocumentItemsAsync(谓词);
等待Cosmanager.DeleteDocumentItemAsync(F[0].Id);
也许应该迭代集合:

var F = await cosmosManager.GetDocumentItemsAsync<T>(predicate);
foreach(var f in F)
  await cosmosManager.DeleteDocumentItemAsync(f.Id);
var F=await cosmanager.GetDocumentItemsAsync(谓词);
foreach(变量f在f中)
等待Cosmanager.DeleteDocumentItemAsync(f.Id);
如果这是Azure CosmosDB,可能有一种方法可以加快速度,即不将所有记录拖到客户端,只获取Id并逐个删除。我不确定该为您的特定上下文提供什么建议,但我最近不得不实施一些措施,有选择地删除数百万Azure表存储记录—这是一种有用的资源—基本上利用了一种功能,可以将谓词发送到Azure进行评估。我不知道这是否适用于你的情况

如果只有少数记录需要删除,那么这种简单化的方法可能还可以;乔恩提到在所有的情况下,对于更多的项目,它肯定会更好。考虑到(如果你有大量的项目和需要保持UI响应),你可以在排队机制中标记删除项目和一些独立的后台进程,或者是某种类型的火灾和遗忘。这里有很多未知数

此外,这仅适用于检索到的第一条记录[0]。我如何更改它以使其删除所有记录

此代码显示为检索集合,但仅删除第一项:

var F = await cosmosManager.GetDocumentItemsAsync<T>(predicate);
await cosmosManager.DeleteDocumentItemAsync(F[0].Id);
var F=await cosmanager.GetDocumentItemsAsync(谓词);
等待Cosmanager.DeleteDocumentItemAsync(F[0].Id);
也许应该迭代集合:

var F = await cosmosManager.GetDocumentItemsAsync<T>(predicate);
foreach(var f in F)
  await cosmosManager.DeleteDocumentItemAsync(f.Id);
var F=await cosmanager.GetDocumentItemsAsync(谓词);
foreach(变量f在f中)
等待Cosmanager.DeleteDocumentItemAsync(f.Id);
如果这是Azure CosmosDB,可能有一种方法可以加快速度,即不将所有记录拖到客户端,只获取Id并逐个删除。我不确定该为您的特定上下文提供什么建议,但我最近不得不实施一些措施,有选择地删除数百万Azure表存储记录—这是一种有用的资源—基本上利用了一种功能,可以将谓词发送到Azure进行评估。我不知道这是否适用于你的情况

如果只有少数记录需要删除,那么这种简单化的方法可能还可以;乔恩提到在所有的情况下,对于更多的项目,它肯定会更好。考虑到(如果你有大量的项目和需要保持UI响应),你可以在排队机制中标记删除项目和一些独立的后台进程,或者是某种类型的火灾和遗忘。这里有很多未知数

var F = await cosmosManager.GetDocumentItemsAsync<T>(predicate);
foreach(var f in F)
  await cosmosManager.DeleteDocumentItemAsync(f.Id);