Linq多表合一查询

这里有四张表

//进货
public class Buy
{
	//进货表id
	public int BuyID { get; set; }
	//供应商id
	public int SupID { get; set; }
}

//进货明细
public class BuyItems
{
	//进货明细id
	public int BID { get; set; }
	//进货id
	public int BuyID { get; set; }
	//商品id
	public int ProductID { get; set; }
	//进货总数
	public int BuyCount { get; set; }

}

//退货
public class Returns
{
	//退货id
	public int ReturnID { get; set; }
	//供应商id
	public int SupID { get; set; }
}

//退货明细
public class ReturnItems
{
	//退货明细id
	public int RID { get; set; }
	//退货id
	public int ReturnID { get; set; }
	//商品id
	public int ProductID { get; set; }
	//退货总数
	public int ReturnCount { get; set; }
}


现在需要查询出供应商的所有进、退货记录,并按供应商与商品分组,最后按供应商与商品id的顺序排列,查询结果汇总在一张表中。

//BuyTable为进货表(Buy)
//BuyItemsTable为进货明细表(BuyItems)
//ReturnsTable为退货表(Returns)
//ReturnItemsTable为退货明细表(ReturnItems)

var query = BuyTable.Join(BuyItemsTable, a => a.BuyID, b => b.BuyID, (a, b) => new
{
	a.SupID,
	b.ProductID,
	BuyCount = b.BuyCount,
	ReturnCount = 0,
}).Concat(ReturnsTable.Join(ReturnItemsTable, a => a.ReturnID, b => b.ReturnID, (a, b) => new
{
	a.SupID,
	b.ProductID,
	BuyCount = 0,
	ReturnCount = b.ReturnCount,
})).GroupBy(p => new { p.SupID, p.ProductID }).Select(p => new
{
	p.Key.SupID,
	p.Key.ProductID,
	SumBuy = p.Sum(s => s.BuyCount),
	SumReturn = p.Sum(s => s.ReturnCount)
}).OrderBy(p => p.SupID).ThenBy(p => p.ProductID);


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
异步 LINQ查询是一种以异步方式执行的查询操作,涉及多个数据。通常情况下,异步 LINQ查询被用于处理执行时间较长的操作,以提高性能和响应性。在异步 LINQ查询中,可以使用 LINQ 查询达式或方法语法来编写查询。 具体来说,异步 LINQ查询通常涉及多个数据,通过将它们连接起来,筛选出需要的数据。这可以通过使用 `join` 关键字将两个或多个连接在一起,使用 `where` 条件筛选数据,以及使用 `select` 投影查询结果。 举个例子,假设我们有两个:`Customers` 和 `Orders`。我们想要查询所有姓氏为 "Smith" 的客户及其对应的订单。我们可以使用以下代码来实现异步 LINQ查询: ```csharp var query = from customer in dbContext.Customers join order in dbContext.Orders on customer.Id equals order.CustomerId where customer.LastName == "Smith" select new { customer, order }; var result = await query.ToListAsync(); ``` 在上述代码中,我们使用了 LINQ 查询达式来连接 `Customers` 和 `Orders` ,并筛选出姓氏为 "Smith" 的客户及其对应的订单。最后,通过调用 `ToListAsync` 方法将查询结果异步返回。 总结起来,异步 LINQ查询是一种以异步方式执行的查询操作,可以通过连接多个数据,筛选数据,并投影查询结果来满足特定需求。通过使用异步 LINQ查询,我们可以提高性能和响应性,特别是在处理执行时间较长的操作时。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [一文说通异步 LINQ](https://blog.csdn.net/biyusr/article/details/125575777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Linq的多查询](https://blog.csdn.net/weixin_44543189/article/details/89303092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值