我有想要与1个关联的项目 - 许多标签
实体: 项目 标签 ItemTag
我想返回所有项目和相关标签,以便在网格中显示。所以收集:
{
ItemTitle: ''
ItemTags: [ '', '', '']
}
我知道dapper可以做多个结果集,但不知道我在这里如何使用该功能。
SELECT * FROM Items
SELECT * FROM Tags
SELECT * FROM ItemTag
然后我需要把所有东西都带到一起,所以我有一个集合:
Items: [
{
ItemTitle: ''
ItemTags: [ '', '', '']
},
{
ItemTitle: ''
ItemTags: [ '', '', '']
}
]
更新:我有一个解决方案,但想要优化输入
public List<Item> GetAll()
{
var sql =
"SELECT * FROM Items;" +
"SELECT ItemId, Tags.Title FROM ItemTag left join Tags on ItemTag.TagId = Tags.Id;";
using (var multipleResults = this.db.QueryMultiple(sql))
{
var Items = multipleResults.Read<Item>().ToList();
var tags = multipleResults.Read<Tag>().ToList();
foreach (var Item in Items)
{
var ItemTags = new List<Tag>();
foreach (var tag in tags)
{
if (tag.ItemId == Item.Id)
{
ItemTags.Add(tag);
}
}
Item.Tags = ItemTags;
}
return Items;
}
}
答案 0 :(得分:2)
这就是我最终的结果。
public List<Item> GetAll()
{
var sql =
"SELECT * FROM Items;" +
"SELECT ItemId, Tags.Title FROM ItemTag left join Tags on ItemTag.TagId = Tags.Id;";
using (var multipleResults = this.db.QueryMultiple(sql))
{
var items = multipleResults.Read<Item>().ToList();
var tags = multipleResults.Read<Tag>().ToList();
var tagsByItemId = tags.ToLookup(t => t.ItemId);
foreach (var item in items)
{
item.Tags = tagsByItemId[item.Id].ToList();
}
return items;
}
}