gpt4 book ai didi

c# - 如何在 LINQ 中使用异步和等待?

转载 作者:太空狗 更新时间:2023-10-30 00:38:48 26 4
gpt4 key购买 nike

我是 ASP.NET 的新手,正在尝试处理示例项目。我知道这是一个愚蠢的问题,但请耐心等待。即使在 SQL 查询中返回多行,我下面的代码也只返回一个结果。我意识到 FirstOrDefaultAsync 只返回第一个元素。我在这里浏览文档:https://msdn.microsoft.com/en-us/library/system.data.entity.queryableextensions(v=vs.113).aspx但我找不到使用什么来代替 FirstOrDefaultAsync,它不仅会返回第一行,还会返回与我的 SQL 条件匹配的所有内容。

到目前为止,这是我的代码:

    [ResponseType(typeof(Region))]
public async Task<IHttpActionResult> GetRegion(int id)
{

var region_id = from sr in db.ServiceToRegions
where sr.Service_ID == id
select sr.Region_ID;

var region = await db.Regions.Select(r =>
new
{
Region_ID = r.Region_ID,
Region_Name = r.Region_Name
}).FirstOrDefaultAsync(r => region_id.Contains(r.Region_ID)); //QQQ

if (region == null)
{
return NotFound();
}

return Ok(region);
}

我应该使用什么来代替 FirstOrDefaultAsync?

最佳答案

您应该在 Where 之后使用 ToListAsync():

var region = await db.Regions
.Select(r =>
new Region
{
Region_ID = r.Region_ID,
Region_Name = r.Region_Name
}
)
.Where(r => region_id.Contains(r.Region_ID))
.ToListAsync();

https://msdn.microsoft.com/en-us/library/dn220257(v=vs.113).aspx

注意“新区域”以解决您的序列化匿名类型问题(我无法评论斯科特的回答)。

更新

因为您尝试部分加载模型(只有 2 个属性),所以您需要像这样使用 ViewModel:

public class RegionVM
{
public int Region_ID { get; set; }
public string Region_Name { get; set; }
}

然后为此更改您的代码:

var region = await db.Regions
.Select(r =>
new RegionVM
{
Region_ID = r.Region_ID,
Region_Name = r.Region_Name
}
)
.Where(r => region_id.Contains(r.Region_ID))
.ToListAsync();

不要忘记更新您的回复类型!

关于c# - 如何在 LINQ 中使用异步和等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38287545/

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