gpt4 book ai didi

linq 加入案例条件

转载 作者:行者123 更新时间:2023-12-04 21:25:02 24 4
gpt4 key购买 nike

嗨,我可以知道如何在使用 linq 时选择“案例”条件吗?
注释掉的代码是我的问题。我如何把条件放在那里?
我的代码:

var r = from u in Users
join p in Payments on u.Id equals p.UserId
join soi in SaleOrderItems on p.ReferenceId equals soi.Id
//if soi.InventoryTypeId == 1
//then join i in Inventories on soi.InventoryOrCourseId equals i.Id
//elseif soi.InventorytypeId ==2
//then join c in Courses on soi.InventoryOrCourseId equals c.Id
where u.Id == 5
select new{ u, p, soi, either i or c};

最佳答案

你必须使用一些外连接技巧来实现这一点,一种直接的方法是通过 DefaultIfEmpty() .本质上,您创建了一个内部连接,然后用缺少的行扩展它:

var r = from u in Users
join p in Payments on u.Id equals p.UserId
join soi in SaleOrderItems on p.ReferenceId equals soi.Id
join i in Inventories on new {a = soi.InventoryTypeId, b = soi.InventoryOrCourseId } equals new {a = 1, b = i.Id} into g1
from oi in g1.DefaultIfEmpty()
join c in Courses on new {a = soi.InventoryTypeId, b = soi.InventoryOrCourseId } equals new {a = 2, b = c.Id} into g2
from oc in g2.DefaultIfEmpty()
where u.Id == 5
select new{ u, p, soi, ic = oi ?? oc};

小心这最后一句话 ic = oi ?? oc ,由于类型不同,匿名类型将使用 System.Object 声明,因此它可以容纳这两种类型,如果您想使用强类型支持,也许更好的选择是同时返回 oc 和 ic 然后进行测试。您最好根据后期使用此查询的方式来决定。

关于linq 加入案例条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4953952/

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