gpt4 book ai didi

c# - 使用 linq 时摆脱嵌套的 foreach 循环

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

我总是发现自己创建的 linq 表达式仍然大量使用嵌套的 foreach 循环。下面是我所讨论内容的一个简单示例,如果这里有人可以向我展示如何将这种低效率代码压缩为单个 linq 表达式,我将不胜感激?

数据库上下文(db)有三个表:Blog、Tag、Junc_Tag_Blog。联结表仅存储带有标签的博客记录。

无论如何,这是我的乱码:

public static Collection<Blog> GetByTag(string tagName)
{
// Get the tag record.
var tag = (from t in db.Tags
where t.Name == tagName
select t).Single();

// Get the list of all junction table records.
var tagJunc = from tj in db.Junc_Tag_Blogs
where tj.Fk_Tag_Id == tag.Id
select tj;

// Get a list of all blogs.
var blogs = from b in db.BlogPosts
select b;

// Work out if each blog is associated with given tag.
foreach(var blog in blogs)
{
foreach(var junc in tagJunc)
{
if(blog.Id == junc.Fk_Blog_Id)
{
// We have a match! - do something with this result.
}
}
}
}

提前感谢可以帮我清理这段代码的人!

最佳答案

您可以构造一个查询,让数据库为您找到匹配项。

List<Blog> blogs = 
(
from t in tag
where t.Name == tagName
from tj in t.Junc_Tag_Blogs
let b = tj.Blog
select b
).ToList();

关于c# - 使用 linq 时摆脱嵌套的 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3608129/

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