C# 具有多对多关系的多个结果
我有我想与1-多个标签关联的项目 实体: 项目 标签 项目标签 我想返回所有项目和相关标签,以便在网格中显示。因此,我们收集了:C# 具有多对多关系的多个结果,c#,sql,dapper,C#,Sql,Dapper,我有我想与1-多个标签关联的项目 实体: 项目 标签 项目标签 我想返回所有项目和相关标签,以便在网格中显示。因此,我们收集了: { ItemTitle: '' ItemTags: [ '', '', ''] } 我知道dapper可以做多个结果集,但不确定我在这里如何使用该功能 SELECT * FROM Items SELECT * FROM Tags SELECT * FROM ItemTag 然后,我需要一些东西来将它们汇集在一起,这样我就有了一个收藏: Items: [ { Ite
{
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;
}
}
public List GetAll()
{
var-sql=
“从项目中选择*+
“从ItemTag中选择ItemId,Tags.Title,然后在ItemTag.TagId=Tags.Id;上加入ItemTag左侧的标记;”;
使用(var multipleResults=this.db.QueryMultiple(sql))
{
var Items=multipleResults.Read().ToList();
var tags=multipleResults.Read().ToList();
foreach(项目中的var项目)
{
var ItemTags=新列表();
foreach(标签中的var标签)
{
if(tag.ItemId==Item.Id)
{
ItemTags.Add(tag);
}
}
Item.Tags=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();
var tagsByItemId = tags.ToLookup(t => t.ItemId);
foreach (var item in items)
{
item.Tags = tagsByItemId[item.Id].ToList();
}
return items;
}
}
public List GetAll()
{
var-sql=
“从项目中选择*+
“从ItemTag中选择ItemId,Tags.Title,然后在ItemTag.TagId=Tags.Id;上加入ItemTag左侧的标记;”;
使用(var multipleResults=this.db.QueryMultiple(sql))
{
var items=multipleResults.Read().ToList();
var tags=multipleResults.Read().ToList();
var tagsByItemId=tags.ToLookup(t=>t.ItemId);
foreach(项目中的var项目)
{
item.Tags=tagsByItemId[item.Id].ToList();
}
退货项目;
}
}
Ref:您需要一个连接项目和标记的查询。您能为您的表显示模式吗。也有助于查看实体的代码。此外,您可能希望查看此