다 - 대 - 다 관계를 가진 다 결과

c# dapper sql

문제

나는 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;
        }
    }

수락 된 답변

여기 내가 결국에 끝난거야.

  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;
        }
    }

Ref : foreach 루프에서 객체의 List 속성 채우기



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.