Я всегда нахожу себя создающим выражения linq, которые все еще интенсивно используют вложенные циклы foreach.Ниже приведен простой пример того, о чем я говорю, и я был бы очень признателен, если бы кто-нибудь здесь показал мне, как сжать этот малоэффективный код в одно выражение linq?
Контекст базы данных(БД) имеет три таблицы: блог, тег, 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.
}
}
}
}
Заранее спасибо человеку, который может помочь мне очистить этот код!