我可以在linq中使用join with let - c#

时间:2010-04-30 19:53:29

标签: c# linq

let order= _relationContext.Orders 
             .Where(x => x.OrderNumber == orderNo)
             .Select(x => new { x.OrderNo, x.OrderDate }).Single()

我想尝试做这样的事情

let order = _relationContext.Orders join _relationContext.Products 
                     .Where(x => x.OrderNumber == orderNo && x.ProductId == Products.ProductID)
                     .Select(x => new { x.OrderNo, x.OrderDate }).Single()

这甚至可能吗?

更新1: 我目前的代码

    var q = from c in sXDocument.Descendants("prop")
        let handle = c.Element("handle")
        let resultref = handle != null ? handle.Element("dsref") : null
        let orderno = (string)c.Element("orderno")
        let orderdetail = _relationContext.Order 
                        .Where(x => x.orderno == orderno)
                        .Select(x => new { x.ProductID, x.OrderDate }).Single()

        select new Order()
        {
            OrderNo = orderno,
            Handle = resultref != null ? (string)resultref.Attribute("handle") : null,
            Title = //Need ProductName,

            ProductID = orderdetail.ProductID.ToString(),
        };

return q.ToList();

我想如果我可以在let关键字中使用连接,那么我可以获得产品名称

1 个答案:

答案 0 :(得分:5)

您只能将“let”用作查询表达式的一部分。如果要定义单独的变量,只需以正常方式声明它。如果你能让我们更多地了解你想要做什么,那真的会有所帮助。

编辑:你可以在“let”子句中使用“join”,但前提是它是一个完整的查询表达式:

from foo in foos
let bar = (from x in baz join y in qux on x.Id equals y.Id select ...)
select ...

你确定你不应该使用联接而不是让我们开始吗?