Я пытаюсь получить отдельный список тегов для записи. Это работает, за исключением того, что имя тега всегда повторяется первым.
public EntityCollection<TagEntity> Tags
{
get
{
EntityCollection<TagEntity> x = new EntityCollection<TagEntity>()
{
new TagEntity(){Id=1, IsActive=true, Name="Tag1"},
new TagEntity(){Id=2, IsActive=true, Name="Tag2"},
new TagEntity(){Id=3, IsActive=true, Name="Tag3"},
new TagEntity(){Id=4, IsActive=true, Name="Tag1"},
new TagEntity(){Id=5, IsActive=true, Name="Tag5"},
new TagEntity(){Id=6, IsActive=true, Name="Tag6"},
};
return x;
}
}
public EntityCollection<StoryTagsEntity> StoryTags
{
get
{
EntityCollection<StoryTagsEntity> x = new EntityCollection<StoryTagsEntity>()
{
new StoryTagsEntity(){ TagId=1, StoryId=1},
new StoryTagsEntity(){ TagId=1, StoryId=2},
new StoryTagsEntity(){ TagId=2, StoryId=1},
new StoryTagsEntity(){ TagId=3, StoryId=1},
new StoryTagsEntity(){ TagId=2, StoryId=3},
new StoryTagsEntity(){ TagId=4, StoryId=1},
};
return x;
}
}
public List<string> FetchTagNamesByStory(bool? isActive, int StoryId)
{
var d = (from t in this.Tags
join st in this.StoryTags on t.Id equals st.StoryId
where t.IsActive == isActive.GetValueOrDefault() && st.StoryId == StoryId
select t.Name);
List<string> x = new List<string>();
foreach (var item in d)
{
x.Add(item);
}
return x;
}
В результате получается список таких тегов:
Тег1, Тег1, Тег1, Тег1
Где это должно быть:
Тег 1, тег2, тег3, тег1
Любые идеи?
0
William Hurst
13 Авг 2009 в 17:39
Параметр StoryId должен быть storyId для лучшей читабельности.
– Yuriy Faktorovich
13 Авг 2009 в 17:59
Я пришел из мира VB.NET, и по какой-то причине StoryId мне легче читать, чем storyId. Это просто привычка.
– William Hurst
14 Авг 2009 в 12:05
2 ответа
Вы присоединяетесь к t.Id
в st.StoryId
вместо st.TagId
. Если вы сдадите StoryId
из 1, вы всегда получите Tag1.
0
dahlbyk
13 Авг 2009 в 17:48
Вы правы, ваше соединение было неправильным, также вы можете сделать следующее:
public List<string> FetchTagNamesByStory(bool? isActive, int storyId)
{
return (from t in Tags
join st in StoryTags on t.Id equals st.TagId
where t.IsActive == isActive.GetValueOrDefault() && st.StoryId == storyId
select t.Name).ToList();
}
0
Yuriy Faktorovich
13 Авг 2009 в 18:10
Похожие вопросы
Новые вопросы
linq
Language Integrated Query (LINQ) - это компонент Microsoft .NET Framework, который добавляет собственные возможности запроса данных в языки .NET. При необходимости рассмотрите возможность использования более подробных тегов, например [linq-to-sql], [linq-to-entity] / [entity-framework] или [plinq]