Linq-to-sql логическая боль - PullRequest
0 голосов
/ 28 октября 2010

Я пытался очистить следующий метод с использованием более разумного и скудного синтаксиса, но я поражаюсь серьезной головной болью, когда речь идет о агрегатных предложениях и фильтрации с использованием 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;
}

Это ужасно.Я знаю, что это уродливо, но после более чем двух часов игры с несколькими предпочтительными вариантами я все еще не могу заставить его фильтровать то, что должен.Куда я иду не так?

1 Ответ

2 голосов
/ 28 октября 2010

Это должно быть эквивалентно, если в одной идее нет повторяющихся тегов.

model.Ideas = ideaList.Where(
                  idea => idea.Tags.Any(
                        tag => tag.Name == Name)).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...