[英]Need to convert Left join SQL to linq query - help appreciated
这是我的代码,我遇到的问题是 On 子句中的小于比较......因为 Linq 不允许这样做......当我将其中一个字段与 null 进行比较时,向下迁移到 where 子句将不起作用。
这是 sql 查询(现在 a.UserID= 是硬编码的)
SELECT A.Policy, A.Comments, A.EventDTTM, A.Status, A.Reason, A.FollowUp
FROM PP_PolicyActivity A
LEFT JOIN PP_PolicyActivity B
ON(A.Policy = B.Policy AND A.EventDTTM < B.EventDTTM)
WHERE A.UserID = 'Ixxxxxx'
AND B.EventDTTM IS NULL AND a.status = 'open - Pending'
order by A.EventDTTM DESC
我需要上述查询的结果集作为 IEnumerable 列表来填充视图
我的任务是重建一个旧的 VB ASP NET,它背后有一组常设生产数据库......我没有更改数据库设计的选项。 我连接到服务器和数据库,这个查询是针对该数据库上的一个表......该模型还反映了实际表的布局。
问题在于 A.EventDTTM < B.EventDTTM - 我无法将其移至 where 子句,因为我还必须在 where 子句中处理 B.EventDTTM IS NULL。 我需要以某种方式重新调整查询,以便它对 'linq' 友好
public class PolicyActivityModel
{
public string Policy { get; set; }
public int PolicyID { get; set; }
public string Status { get; set; }
public string Reason { get; set; }
public string Comments { get; set; }
public DateTime EventDTTM { get; set; }
public string UserID { get; set; }
public DateTime FollowUp { get; set; }
}
公司政策禁止我显示连接字符串。
我对 Linq 非常陌生,非常感谢任何帮助
谢谢你
从数据库中获取策略后,您可以使用导航属性。
var policy = DbContext.First(x => x.Id == 1000);
var otherPolicies = policy.ConnectedPolicies.Where(p => ...);
自连接很奇怪,但这是对 Linq 最直接的翻译:
var query = from leftPP in PP_PolicyActivity
join rightPP in PP_PolicyActivity
on new { Policy = leftPP.Policy, EventDTTM = leftPP.EventDTTM }
equals new { Policy = rightPP.Policy, EventDTTM = rightPP.EventDTTM }
into pp from joinedRecords.DefaultIfEmpty()
where leftPP.UserId == 1
&& leftPP.EventDTTM < rightPP.DTTM)
&& rightPP.EventDTTM == null
&& leftPP.status = "open - Pending"
select new
{
leftPP,
rightPP
}
我免费输入了这个,没有模型或智能感知,因此可能会有一些较小的错误。
您可以在该子句中添加 order by,但它仍然是 IQeryable,所以我会保留它。
然后,获取模型列表:
var results = query.OrderByDescending(x => x.EventDTTM).ToList();
实际的连接是第 2、3、4 和 5 行。它是 SQL 的冗长和“倒退”,最重要的是使用匿名类型。 访问单个属性将类似于:
results[0].leftPP.PolicyId
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.