嵌套列表<;字符串>;通过LINQ SQL查询在自定义类列表中
本文关键字:列表 查询 自定义 SQL 通过 lt 字符串 gt 嵌套 LINQ | 更新日期: 2023-09-27 17:57:53
这是我的代码,用于从数据库中检索有关打印机驱动程序列表的信息。该表列出了打印机驱动程序,以及在哪些服务器上找到了这些驱动程序
public List<PrinterDrivers> GetPrinterDriversFromCache()
{
using (dbPrintSimpleDataContext db = new dbPrintSimpleDataContext())
{
var q = from p in db.GetTable<tblPrinterDriverCache>()
where p.CacheGUID == mostRecentCacheID()
group p by p.PrinterDriver into g
select new PrinterDrivers
{
DriverName = g.Key,
InstalledOn = g.Where(x => x.PrinterDriver == g.Key).Select(x => x.PrinterServer).ToList(),
Usable = (g.Count() == Properties.Settings.Default.PrintServers.Count)
};
return q.ToList();
}
}
我试图返回的是一个List,它包含一个属性,其中包含打印机驱动程序所在的服务器。我认为我已经达到了我当前LINQ SQL知识的极限:(
生成的列表应包含:
DriverName=打印机驱动程序名称,在本例中为组密钥(字符串)
InstalledOn=列表(包含在此打印机驱动程序上找到的服务器列表)
可用=简单的bool检查它所在的服务器是否与首选项文件中的服务器数量相同。
感谢您的帮助:)
试试这个:
LINQ Lambda,通过列表分组
问题是Linq不知道ToList
。整个查询只有一部分在服务器上执行,因为在最后的ToList
调用之前还有一个额外的ToList
调用(下面的未测试代码)
public List<PrinterDrivers> GetPrinterDriversFromCache()
{
using (dbPrintSimpleDataContext db = new dbPrintSimpleDataContext())
{
var q = (from p in db.GetTable<tblPrinterDriverCache>()
where p.CacheGUID == mostRecentCacheID()
group p by p.PrinterDriver.DriverName into g
select g
).ToList().Select(g => new PrinterDrivers
{
DriverName = g.Key,
InstalledOn = g.Where(x => x.PrinterDriver == g.Key).Select(x => x.PrinterServer).ToList(),
Usable = (g.Count() == Properties.Settings.Default.PrintServers.Count)
});
return q.ToList();
}
}
从我链接的答案中翻译出相同的模式,你的答案是:
var q = db.GetTable<tblPrinterDriverCache>()
.Where(p => p.CacheGUID == mostRecentCacheID())
.Select(o => new { DriverName = o.DriverName, PrintServer = o.PrintServer })
.GroupBy(g => g.DriverName)
.ToList()
.Select(g => new PrinterDrivers
{
DriverName = g.Key,
InstalledOn = g.Select(p => p.PrinterServer).ToList(),
Usable = (g.Count() == Properties.Settings.Default.PrintServers.Count)
}
)
.ToList();