gpt4 book ai didi

c# - LINQ 删除结果

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:52 26 4
gpt4 key购买 nike

我正在尝试将一个复杂的(而且相当笨拙的)动态 SQL 查询转换为 LINQ 查询。

到目前为止,我有以下 LINQ 查询:

var results = (
from c in Customers
from d in MonthCalendar
join f in Facilities on c.CustomerCode equals f.CustomerCode
join p in ProjectedCashFlows on f.FacilityId equals p.FacilityId into pj
from p in pj.DefaultIfEmpty()
where d.ExpectedYear == currentYear
&& f.FacilityStatusId == 1
&& (p.ExpectedYear == null || d.ExpectedYear == p.ExpectedYear)
&& (p.ExpectedMonth == null || d.ExpectedMonth == p.ExpectedMonth)
&& c.PrimaryArmId == userId
&& (p.ProjectedCashFlowStatusId == null || p.ProjectedCashFlowStatusId != 4)
select new
{
CustomerCode = c.CustomerCode,
CustomerName = c.CustomerName,
FacilityId = f.FacilityId,
FacilityDescription = f.FacilityProductDescription,
FacilityCurrency = f.FacilityCurrencyId,
FacilityLimit = f.Limit,
ExpectedYear = d.ExpectedYear,
ExpectedMonth = d.ExpectedMonth,
ExpectedAmount = p == null ? 0 : (double)p.ExpectedAmount

}
);

我正在尝试从与 Facilities 表具有一对多关系的 Customer 表中检索详细信息。然后我试图检索位于 ProjectedCashFlows

中的任何详细信息

我遇到的问题是,无论 ProjectedCashFlows 表中是否存在任何值,查询都应返回所有 CustomerFacilites 信息.

不幸的是,当 ProjectedCashFlows 表中存在 Facility 时,它只返回 CustomerFacilities 信息。

我使用了 MonthCalender 表来列出一年中的每个月。

相关表信息为:

客户

  • 客户代码
  • 客户姓名
  • PrimaryArmId

设施

  • 客户代码
  • 设施编号
  • FacilityCurrencyId
  • 设施限制
  • 设施描述

预计现金流量

  • 客户代码
  • 设施编号
  • 预期年份
  • 预计月份
  • 预期金额
  • ProjectedCashFlowStatusId

月历

  • 预计月份
  • 预期年份

例如,我有一个客户在 Facilities 表中有 4 行,但是,其中 2 个设施没有出现在 ProjectedCashFlows 表中,因此它们不是显示。

如果 ProjectedCashFlows 中不存在条目,则应从 CalendarMonths 表中获取 ExpectedMonth 和 ExpectedYear,为 ExpectedAmount 返回 0 并使用 中的 FacilityId code>设施表。

正如您可能知道的那样,我刚刚开始使用 LINQ。

谁能告诉我正确的方向?

最佳答案

您的查询使用 p 假设它是非空的:

where d.ExpectedYear == currentYear 
&& f.FacilityStatusId == 1
&& (p.ExpectedYear == null || d.ExpectedYear == p.ExpectedYear)
// etc

但是您使用了 DefaultIfEmpty(),当没有 ProjectedCashFlows 时,它会在逻辑上创建一个具有单个空值的序列。

所以基本上你需要这样的东西:

where d.ExpectedYear == currentYear 
&& f.FacilityStatusId == 1
&& (p == null ||
((p.ExpectedYear == null || d.ExpectedYear == p.ExpectedYear)
// etc
))

关于c# - LINQ 删除结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7834682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com