当您的子记录通过lambda查询加载时,是否有任何人在使用LINQ to SQL加载关联时遇到问题?例如:
var orderLine = db.OrderLines.
Where(ol => ol.ID == orderLineID select ol).
First();
// navigate to order via the association
var order = orderLine.GetOrder();
我得到的基本上是GetOrder()的null结果。
但如果我这样做:
var orderLine = (from ol in db.OrderLines where ol.ID == orderLineID).First();
var order = orderLine.GetOrder();
工作正常。
这会导致什么?这是一个错误吗?
编辑:这是与Lambda表达式一起工作的实际代码,注释掉了“不工作”
var msg = db.Messages.Where(m => m.ID == msgID).First(); if (msg.SentTS.HasValue) return; // Get the message recipients // I don't get it.. why doesn't lambda expressions work here? returns 0 results! // var testtos = msg.GetMessageTos.Where(mt => mt.Active); var tos = from mt in db.MessagesTos where mt.Active && mt.MessageID == msgID select mt;
答案 0 :(得分:0)
你也可以尝试一下,我觉得它有点清洁。
var orderLine = db.OrderLines.Single( ol => ol.ID == orderLineID );
var order = orderLine.GetOrder();
我想要使用.First()
代替.Single()
的非工作示例。
答案 1 :(得分:0)
在我看来,问题与关联有关,而不是lambda表达。
在您的方案中,这应该有效:
var tos = db.MessagesTos.Where(mt=> mt.Active && mt.MessageID);
虽然这不会:
var tos = from mt in msg.SentTS
where mt.Active
select mt;
至于为什么它不起作用,我建议看一下设计器中的关联并检查它是否正确匹配db模型(匹配正确的列)。我还建议确认msg.SentTS实际上是空的,无论你在其上运行任何进一步的查询。
答案 2 :(得分:0)
请参阅我的编辑以获取有效的代码。我猜有时“答案”是做有效的,不一定是你理解的。