【发布时间】:2018-08-03 18:08:20
【问题描述】:
上下文:我有一个父表(Product)、一个子表(Transactions)和一个子数据表(RelatedData)。
一个产品有很多交易。 'A' 类型的交易有一个带有 SpecialData 的相关数据条目。
我想获取所有 LAST 交易类型为“A”且 SpecialData 值为“B”的产品记录
我在 MSSQL 数据库上使用 linq to SQL。
var data = from p in db.Product
select p;
//various filters
data = data.Where(...);
我现在想要实现的查询有什么:
data = data.Where(p=> p.Transactions
.Where(t => p.ProductID == t.ProductID &&
t.TransType == 'A')
.OrderByDescending(t => t.DateTime)
.FirstOrDefault(t => t.RelatedData //Get latest
.Single().SpecialData == 'B')
!= null
);
它没有返回我在数据库中设置的任何测试数据。请帮忙。
【问题讨论】:
-
你不需要加入吗?
-
那么,您是否尝试过简化任何查询并对其进行调试?找出返回的位置和数据并从那里开始?
-
将其拆分为多个查询,并检查您在哪一步过滤掉不应过滤掉的内容
-
如果在 LINQ 中过于复杂,请尝试编写存储过程以获得所需的结果。
-
@RyanWilson ORM 不需要连接,它们从实体关系生成连接语句。这些实体通过
Transactions集合相关联。这意味着p.ProductID == t.ProductID是毫无意义的顺便说一句
标签: c# sql sql-server database linq