如何处理错误"方法'第一''只能用作最终查询操作"

Dan*_*Ali 20 linq-to-entities

我希望通过关系从不同的表中检索数据库中的数据,但是我得到一个我不知道如何处理的错误.

int customer_id = int.Parse(this.comboBoxnamecustomer.SelectedValue.ToString());

a = (from c in db.Invoices where c.CustomerID == customer_id select new { 
        customerName = c.Customer.Name,
        ProductName = c.InvoiceItems
            .Where(x => x.InvoiceId == c.InvoiceId)
            .First().Product.ProductsName.Name
    }).ToList();
Run Code Online (Sandbox Code Playgroud)

未处理的异常:System.NotSupportedException:方法"First"只能用作最终查询操作.请考虑在此实例中使用方法"FirstOrDefault".

问题在于.First()方法,但如果我删除它,我无法传递到另一个表.

Roa*_*ich 30

正如错误所述,您的解决方案就是使用FirstOrDefault.然而,这将返回null如果结果ProductName查询是空的,这意味着你会得到一个NullReferenceExceptionFirstOrDefault().Product.ProductsName.Name.这可以通过在调用之前移动属性转换来解决FirstOrDefault():

a = (from c in db.Invoices where c.CustomerID == customer_id select new { 
     customerName=c.Customer.Name,
     ProductName=c.InvoiceItems.Where(x=> x.InvoiceId==c.InvoiceId)
                               .Select(i => i.Product.ProductsName.Name)
                               .FirstOrDefault()
}).ToList();
Run Code Online (Sandbox Code Playgroud)