如何在 Linq 中编写嵌套的 Sql 查询 [关闭]
Posted
技术标签:
【中文标题】如何在 Linq 中编写嵌套的 Sql 查询 [关闭]【英文标题】:how to write a nested Sql query in Linq [closed] 【发布时间】:2018-05-03 17:59:28 【问题描述】:所以我在 sql 中有这个查询:
select (select ConfigItemDescripcion from SGRC_ConfigItem where ConfigId = 'SEGM' and ConfigItemId = SegmentoId) Segmento,
(select ConfigItemDescripcion from SGRC_ConfigItem where ConfigId = 'MRCA' and ConfigItemId = MarcaId) Marca,
Producto,
Familia
from sgrc_emisor
where EmisorCuenta = '3702406435'
我想在 linq 表达式或 lambda 表达式中编写相同的查询。
提前感谢您的帮助
【问题讨论】:
【参考方案1】:最后我设法在 linq 中提出查询,不知道如何在 lambda 中执行,但它工作正常。
var obj = (from emisor in _context.DbSetEmisores
where emisor.EmisorCuenta == cuenta
select new EmisorDto
Segmento =
((from itemConf in _context.ItemsDeConfiguracion
where itemConf.ConfigID == "SEGM" && itemConf.ConfigItemID == emisor.SegmentoId
select new itemConf.ConfigItemDescripcion ).FirstOrDefault().ConfigItemDescripcion),
Marca =
((from itemConf in _context.ItemsDeConfiguracion
where itemConf.ConfigID == "MRCA" && itemConf.ConfigItemID == emisor.MarcaId
select new itemConf.ConfigItemDescripcion ).FirstOrDefault().ConfigItemDescripcion),
Producto = emisor.Producto,
Familia = emisor.Familia,
SegmentoId = emisor.SegmentoId,
MarcaId = emisor.MarcaId,
).FirstOrDefault();
【讨论】:
【参考方案2】:使用 LINQ 时,您可以使用下面 LINQ 中所示的任一查询语法(如果您熟悉 SQL,那么这看起来更自然)。
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/query-syntax-and-method-syntax-in-linq
另一个选项是使用方法语法,下面是一个简短的示例。这允许链接方法,要记住的最重要的事情是应该使用“var”,返回类型是动态的,如果你只使用“var”,编译器会帮助你很多
var items = _list.Where(x => x.Attribute1 == "NextField") .Where(x => x.Attribute2 == "别的东西");
有时让人们陷入困境的其他事情是 LINQ 使用“延迟执行”
【讨论】:
感谢您的帮助,但我想要一个答案而不是一个例子,尽管不要误会我的意思。以上是关于如何在 Linq 中编写嵌套的 Sql 查询 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
EF Core 嵌套 Linq 选择导致 N + 1 个 SQL 查询
如何在 Web 服务 asp.net 中返回 linq to sql 查询结果?