Я пытался очистить следующий метод с использованием более разумного и скудного синтаксиса, но я поражаюсь серьезной головной болью, когда речь идет о агрегатных предложениях и фильтрации с использованием L2S.В частности, я чувствую, что должен иметь возможность использовать метод .Contains () для фильтрации объектов, теги которых соответствуют строковому параметру, переданному в методе, но это не сработало.
public TagListViewModel GetTagModel(string Name)
{
var model = new TagListViewModel();
var repo = new SimpleRepository("Wishlist");
var ideas = repo.All<Idea>();
List<Idea> ideaList = new List<Idea>();
foreach (Idea i in ideas)
{
var query = from tag in repo.All<Tag>()
join ideatag in repo.All<IdeaTag>()
on tag.ID equals ideatag.TagId
where ideatag.IdeaId == i.ID
select tag;
i.Tags = query.ToList<Tag>();
ideaList.Add(i);
}
foreach (Idea i in ideaList)
{
var query = from vote in repo.All<IdeaVotes>()
where vote.IdeaId == i.ID
select vote;
i.Votes = query.ToList<IdeaVotes>();
}
// Here begins the problem area. I should be able to get a tag from the repo
// whose name matches the "Name" parameter and then call a .Contains() method to
// filter this list, shouldn't I?
List<Idea> filteredTagList = new List<Idea>();
foreach (Idea item in ideaList){
foreach(Tag t in item.Tags)
{
if (t.Name == Name)
filteredTagList.Add(item);
}
}
model.Ideas = filteredTagList;
return model;
}
Это ужасно.Я знаю, что это уродливо, но после более чем двух часов игры с несколькими предпочтительными вариантами я все еще не могу заставить его фильтровать то, что должен.Куда я иду не так?