从lambda查询的结果访问关联时出现问题

时间:2010-08-24 16:25:08

标签: c# linq-to-sql lambda

当您的子记录通过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;

3 个答案:

答案 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)

请参阅我的编辑以获取有效的代码。我猜有时“答案”是做有效的,不一定是你理解的。