我需要根据UserPrefrenceCategory获取分组数据和计数。 这不是实际情况,但它是我需要做的类似的简单案例:
public class ProductSale{
public long ID {get; set;}
public long ProductID {get; set;}
public DateTime SaleDate {get; set;}
...
}
public class Product{
public long ID {get; set;}
public string Description {get; set;}
public long ProductCategoryID {get; set;}
...
}
public class ProductCategory{
public long ID {get; set;}
public string Description {get; set;}
}
public class UserPrefrenceCategory{
public long ID {get; set;}
public string Description{get; set;}
}
public class UserPrefrenceCategoryProduct{
public long UserPrefrenceCategoryID {get; set;}
public long ProductID {get; set;}
}
根据上述结构,我们需要使用LINQ生成按USer Preferred Category分组的产品销售计数报告。 请记住,一个产品可能存在于多个USer Prefrence类别中。
我已经获得了计算UserPrefrenceCategory并按每个USer首选类别的产品列表过滤ProductSale并获得UserPrefrenceCategory的销售计数。 我想删除循环,因为这不会给出快速的结果,我需要以更好的方式实现使用Linq获得这些结果。
提前感谢任何指导。
已更新
这是我的代码
public static IEnumerable<ProductUserPrefrenceSale> GetProductSale(DateTime startDate, DateTime endDate)
{
using (var db = new Entities())
{
var sales= db.ProductSale.Where(x => x.SaleDate >= startDate && x.SaleDate <= endDate).ToList();
var productids=(from r in sales
group r by r.ProductID
into g
select (g.Key));
var productGroupList = db.UserPrefrenceCategoryProduct.Where(x => x.Product.Any(s => productids.Contains(s.ID))).ToList()
.Select(x => new ProductUserPrefrenceSale{ ID = x.ID, UserCategory= x.Description, Count = GetUserPrefrenceCategoryWiseCount(sales, x.Product.Select(s => s.ID)) }).ToList();
return productGroupList;
}
}
public static long GetUserPrefrenceCategoryWiseCount(IEnumerable<ProductSale> sales, IEnumerable<long> productid)
{
var result= (from s in sales
where productid.Contains((int) s.ProductID)
select s.Count() ).ToList();
return result;
}