Csharp/C#教程:如何在Entity Framework中使用条件聚合sql查询?分享


如何在Entity Framework中使用条件聚合sql查询?

我正在使用Asp.Net MVC 5和Entity Framework 6.2.0以及LINQ扩展方法语法。

我有5个变种表,详情如下:

产品表:

ProductID Name 12 T-Shirt 

变体表:

 VariantID ProductID Name 1 12 Size 2 12 Color 3 12 Material 

VariantOption表:

 VariantOptionID VariantID VariantOptionName 1 1 Small 2 1 Medium 3 2 Red 4 2 Blue 5 3 Cotton 6 3 Lawn 

Sku表:

 SkuID ProductID SKU Price Barcode 1 12 Th-Sm-Red-Cot 120.00 345423 2 12 Th-Sm-Red-Lon 130.00 345454 3 12 Th-Sm-Blue-Cot 140.00 345451 4 12 Th-Sm-Blue-Lon 150.00 345431 5 12 Th-Md-Red-Cot 160.00 345472 6 12 Th-Md-Red-Lon 170.00 345479 7 12 Th-Md-Blue-Cot 180.00 654353 8 12 Th-Md-Blue-Lon 190.00 254353 

VariantOptionCombination表:

 VariantOptionID SkuID 1 1 3 1 5 1 1 2 3 2 6 2 1 3 4 3 5 3 1 4 4 4 6 4 

我想在网页上显示这些表记录为。

 Size Color Material Price Sku Small Red Cotton 120.00 345423 Small Red Lawn 130.00 345454 Small Blue Cotton 140.00 345451 Small Blue Lawn 150.00 345431 Medium Red Cotton 160.00 345472 Medium Red Lawn 170.00 345479 Medium Blue Cotton 180.00 654353 Medium Blue Lawn 190.00 254353 

我正在使用此查询来实现所需的输出。 如何在Entity Framework linq中翻译此查询?

 select max(case when v.Name = 'Size' then vo.Name end) as Size, max(case when v.Name = 'Color' then vo.Name end) as Color, max(case when v.Name = 'Material' then vo.Name end) as Material, s.price from ProductSKU s join ProductVariantOptionCombination voc on s.SkuID = voc.SkuId join ProductVariantOption vo on vo.VariantOptionId = voc.VariantOptionId join ProductVariant v on v.VariantId = vo.VariantId group by s.Price; 

试试这样;

上述就是C#学习教程:如何在Entity Framework中使用条件聚合sql查询?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

  var query = from s in YourDbContext.DbSet join voc in YourDbContext.DbSet on s.SkuID equals voc.SkuID join vo in YourDbContext.DbSet on voc.VariantOptionID equals vo.VariantOptionID join v in YourDbContext.DbSet on vo.VariantID equals v.VariantID group new {s,voc, vo, v} by s.Price into g select new { Price = g.Key, Size = g.Max(x => xvName == "Size" ? x.vo.VariantOptionName : ""), Color = g.Max(x => xvName == "Color" ? x.vo.VariantOptionName : ""), Material = g.Max(x => xvName == "Material" ? x.vo.VariantOptionName : "") }; 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1004648.html

(0)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐