Я пытаюсь очистить следующий метод, используя более разумный и худой синтаксис, но я поражаю серьезными головными болями, когда речь идет о агрегатных предложениях и фильтрации с использованием L2S. В частности, я считаю, что должен использовать метод .Contains() для фильтрации объектов, чьи теги соответствуют параметру строки, переданному в методе, но он не сработал.Логическая ошибка Linq-to-sql
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;
}
Это некрасиво. Я знаю, что это уродливо, но после более чем двух часов игры с несколькими предпочтительными вариантами я до сих пор не могу заставить его фильтровать то, как он должен был. Где я иду не так?
Любые !! Вот почему он не работал. Я был сосредоточен на использовании Contains(). Спасибо за это. –
С Содержаниями вы можете соответствовать только точному элементу, например 'tag', а не фильтровать по выражению лямбда. –