gpt4 book ai didi

c# - 选择具有相同过滤器的多个子列

转载 作者:太空宇宙 更新时间:2023-11-03 21:17:44 27 4
gpt4 key购买 nike

我有这个 Linq lambda 表达式,它生成异常复杂的 SQL 选择到数据库。是否有可能以某种方式简化它?

var devices = db.Devices
.Where(a => a.active == true)
.Select(a => new DeviceToDisplay
{
Id = a.Id,
serialNumber = a.serialNumber,
deviceRegion = a.deviceRegion,
activeIP = a.IPaddresses.Where(b => b.active == true).Select(b => b.IPaddress1).FirstOrDefault(),
Wip = a.IPaddresses.Where(b => b.active == true).Select(b => b.W_IP).FirstOrDefault(),
Sip = a.IPaddresses.Where(b => b.active == true).Select(b => b.S_IP).FirstOrDefault(),
model = a.SPdatas.Where(c => c.model != "").OrderByDescending(c => c.collectionDate).Select(c => c.model).FirstOrDefault(),
firmware = a.SPdatas.Where(c => c.model != "").OrderByDescending(c => c.collectionDate).Select(c => c.firmware).FirstOrDefault(),
lastMPteamActivity = a.activityLogs.OrderByDescending(c => c.updatedDate).Select(c => c.updatedDate).FirstOrDefault(),
country = a.MPPinformations.Select(c => c.country).FirstOrDefault()
});

最佳答案

首先,您的 linq 查询看起来非常复杂。想象一下您将如何通过编写 SQL 查询来实现它。

一个建议:你正在写这样的东西:

 a.IPaddresses.Where(b => b.active == true).

  a.SPdatas.Where(c => c.model != "").OrderByDescending(c => c.collectionDate).

在多个地方。

相反,您可以创建一个匿名类型。例如,

var foo = from x in sb.Devices.Where(a=> a.active)
select new { Id = x.ID,
IPAddress = a.IPaddresses.Where(b => b.active), ... }

然后您可以使用 foo 创建您的 Devices 对象。

关于c# - 选择具有相同过滤器的多个子列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32872185/

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