Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linq嵌套查询_Linq - Fatal编程技术网

linq嵌套查询

linq嵌套查询,linq,Linq,我有一个查询包含以下内容 var myvar = from table in MyDataModel where..... select new MyModel { modelvar1 = ..., modelvar2 = (from..... into anothervar) } 我想做的是让modelvar2成为我

我有一个查询包含以下内容

 var myvar = from table in MyDataModel
             where.....
             select new MyModel
             {
                  modelvar1 = ...,
                  modelvar2 = (from..... into anothervar)
             }
我想做的是让modelvar2成为我当前从另一个Var获得的结果与MyDataModel中的另一个表之间的连接


谢谢

括号看起来更像子查询,而不是连接。这就是加入的方式。
中的示例表

使用(DataClasses1DataContext=newdataclasses1datacontext())
{
//如果数据库中的外键正确,则可以
//用“点”符号隐式连接。
var myvar=来自context.Products中的prod
其中prod.ListPrice<10
选择新的
{
名称=产品名称,
类别=prod.ProductSubcategory.ProductCategory.Name,
};
//如果没有外键,则需要表示连接
//明确地像这样
var myvar2=来自context.Products中的prod
在context.ProductSubcategories中联接prodSubCategory
在prod.ProductSubcategory上,ID等于prodSubCategory.ProductSubcategory ID
在context.ProductCategories中加入prodCategory
在prodSubCategory.ProductCategoryID上等于prodCategory.ProductCategoryID
其中prod.ListPrice<10
选择新的
{
名称=产品名称,
Category=prodCategory.Name,
};
//如果你真的想做一个子查询,这就是如何做的
var myvar3=来自context.Products中的prod
其中prod.ListPrice<10
选择新的
{
名称=产品名称,
类别=(来自context.ProductSubcategories中的prodSubCategory
在context.ProductCategories中加入prodCategory
在prodSubCategory.ProductCategoryID上等于prodCategory.ProductCategoryID
选择prodCategory.Name).First(),
};
//如果您想从子查询中获取列表,可以这样做
var myvar4=来自context.ProductCategories中的prodCategory
选择新的
{
Name=prodCategory.Name,
Subcategoris=(来自context.ProductSubcategories中的prodSubCategory
其中prodSubCategory.ProductCategoryID==prodCategory.ProductCategoryID
选择新的{prodSubCategory.ProductSubcategory ID,prodSubCategory.Name}).ToList(),
};
}
可以写成

from o in Orders
join od in (
    from od in OrderDetails join p in Products on od.ProductID equals p.ProductID select od) 
    on o.OrderID equals od.OrderID
select o

你能说得更具体些吗?为什么它现在不起作用了?它不起作用了,因为我缺少了计算连接的括号后面的部分。我现在还在犹豫,但如果你能告诉我语法,那就太棒了。谢谢。我真正想要的是一个子查询,如示例3。我希望将子查询的结果与另一个表连接起来,而不是像您显示的那样使用第一个元素。这是如何工作的?@user471807,我添加了第四个示例,其中从子查询返回一个列表。注意,如果嵌套太深,这有时会创建过于昂贵的SQL查询,请在SQL Profiler中监视它们,以确保得到一个合理的查询。
SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight], [t0].[ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion], [t0].[ShipPostalCode], [t0].[ShipCountry]
FROM [Orders] AS [t0]
INNER JOIN ([Order Details] AS [t1]
    INNER JOIN [Products] AS [t2] ON [t1].[ProductID] = [t2].[ProductID]) ON [t0].[OrderID] = [t1].[OrderID]
from o in Orders
join od in (
    from od in OrderDetails join p in Products on od.ProductID equals p.ProductID select od) 
    on o.OrderID equals od.OrderID
select o