gpt4 book ai didi

c# - 如何等待(在异步方法中)包含 C# 方法调用的 linq 请求

转载 作者:行者123 更新时间:2023-11-30 21:30:58 24 4
gpt4 key购买 nike

我正在 API 中实现 Get 方法,并且我正在对数据库执行 linq(Linq to Entity)请求:

  var result = db.SomeEntity
.ToList()
.Select(a => new {a, Rank(a, key})
.Where(obj => obj.Rank > 0));

Rank 方法根据 a 中的某些属性返回 Integer。换句话说,我将一个对象包装在一个新对象及其相关评级中。

因为它是 API 中的 Get 方法,所以最好让它异步并等待 linq 查询。问题是我必须在 Select 之前调用 ToList,因此 Select 方法不必转换为 SQL(以便 Rank 方法调用起作用),因此我无法使用 ToListAsync在 Where 函数之后

例如

await (db.Some.....Where(..)).ToListAsync()

我不确定该怎么做。有什么建议么?

最佳答案

Im not able to use ToListAsync after the Where function

您仍然可以等待数据库操作,只需将操作括在括号中,这样整体结果就是正确的类型:

var result = (await db.SomeEntity.ToListAsync())
.Select(a => new {a, Rank(a, key})
.Where(obj => obj.Rank > 0));

相反,您可以分两步执行整个操作:

var list = await db.SomeEntity.ToListAsync();
var result = list.Select(a => new {a, Rank(a, key})
.Where(obj => obj.Rank > 0));

实际上,无论哪种方式都是一样的。 SelectWhere 在这种情况下不执行任何异步操作,因此没有其他等待。您的数据库操作发生在 .ToList() 上,而不是 .Where() 上。

注意:如果完全可以在 LINQ-to-Entities 表达式树中执行 Rank() 逻辑,那可能是一个更好的整体选择。即使它使逻辑变得更加复杂,如果 SomeEntity 的数量达到几乎任何显着数量,那么性能优势也是显而易见的。

关于c# - 如何等待(在异步方法中)包含 C# 方法调用的 linq 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53876795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com