c# – 最好的方法来提取与dapper dot网络orm的一对多的关系?
发布时间:2020-12-15 06:52:04 所属栏目:百科 来源:网络整理
导读:我有两个课程“产品”和“卖家”. public class Product{ public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public Seller Seller { get; set; } public int? SellerId { get; set; }}public class Seller
我有两个课程“产品”和“卖家”.
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public Seller Seller { get; set; } public int? SellerId { get; set; } } public class Seller { public int Id { get; set; } public string Name { get; set; } public List<Product> Products { get; set; } } 我想使用dapper提取所有产品的卖家列表. 目前我正在做这样的事情: Dictionary<int,Seller> dic = new Dictionary<int,Seller>(); Conn.Query<Seller,Product,int> (@"select s.*,p.* from Sellers s Join Products p on p.SellerId = s.Id",(s,p) => { if (dic.ContainsKey(s.Id)) dic[s.Id].Products.Add(p); else { s.Products = new List<Product>(); s.Products.Add(p); dic.Add(s.Id,s); } return s.Id; }); var sellers = dic.Select(pair => pair.Value); 有没有更好的方法? 解决方法
我想你正在混合你想要如何使用它来存储数据.我建议你的数据库规范化.
//Normalized Database classes public class Seller { public int Id { get; set; } // primary key public string Name { get; set; } } public class Product { public int Id { get; set; } // primary key public int SellerId { get; set; } // foreign key public string Name { get; set; } public decimal Price { get; set; } } 然后可以直接查询卖家和产品表. var Sellers = connection.Query<Seller>("Select * from Seller"); var Products = connection.Query<Product>("Select * from Product"); 然后使用linq“group by”将产品投入到字典中 var SellerWithProductsDict = (from prod in Products group prod by prod.SellerId into groupedProducts select groupedProducts) .ToDictionary(gp => gp.SellerId,gp => gp.ToList()); 然后,您可以循环通过SellerWithProductsDict查看所有卖家产品,如果您需要卖家名称,只需从卖家查询结果中获取索引 ************************************** 这是答案的结束,但是如果您真的需要与卖家混合的产品,您可以使用上述相同的数据库结构,并执行以下操作: var qry = @"Select s.Id as SellerId,s.Name as SellerName,p.Id as ProductId,p.Name as ProductName,p.Price as ProductPrice From Seller as s,Product as p Where s.Id = p.id" var SellerWithProducts = connection.Query(qry) 然后使用linq“group by”函数将其抛入一个字典中.我建议看看这个“Linq group-by multiple fields”的帖子,以帮助该组由linq (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |