Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有多对多关系的多个结果_C#_Sql_Dapper - Fatal编程技术网

C# 具有多对多关系的多个结果

C# 具有多对多关系的多个结果,c#,sql,dapper,C#,Sql,Dapper,我有我想与1-多个标签关联的项目 实体: 项目 标签 项目标签 我想返回所有项目和相关标签,以便在网格中显示。因此,我们收集了: { ItemTitle: '' ItemTags: [ '', '', ''] } 我知道dapper可以做多个结果集,但不确定我在这里如何使用该功能 SELECT * FROM Items SELECT * FROM Tags SELECT * FROM ItemTag 然后,我需要一些东西来将它们汇集在一起,这样我就有了一个收藏: Items: [ { Ite

我有我想与1-多个标签关联的项目

实体: 项目 标签 项目标签

我想返回所有项目和相关标签,以便在网格中显示。因此,我们收集了:

{
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:

您需要一个连接项目和标记的查询。您能为您的表显示模式吗。也有助于查看实体的代码。此外,您可能希望查看此