资源描述:
《linq体验(6)——linq to sql语句之join与order by》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Join操作适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等。对各个表之间的关系,就用这些实现对多个表的操作。说明:在Join操作中,分别为Join(Join查询),SelectMany(Select一对多选择)和GroupJoin(分组Join查询)。该扩展方法对两个序列中键匹配的元素进行innerjoin操作SelectMany说明:我们在写查询语句时,如果被翻译成SelectMany需要满足2个条件。1:查询语句中没有join和into,2:必须出现EntitySet。在我们表关系中有
2、一对一关系,一对多关系,多对多关系等,下面分别介绍一下。1.一对多关系(1toMany):varq=fromcindb.Customersfromoinc.Orderswherec.City=="London"selecto;语句描述:Customers与Orders是一对多关系。即Orders在Customers类中以EntitySet形式出现。所以第二个from是从c.Orders而不是db.Orders里进行筛选。这个例子在From子句中使用外键导航选择伦敦客户的所有订单。varq=frompind
3、b.Productswherep.Supplier.Country=="USA"&&p.UnitsInStock==0selectp;语句描述:这一句使用了p.Supplier.Country条件,间接关联了Supplier表。这个例子在Where子句中使用外键导航筛选其供应商在美国且缺货的产品。生成SQL语句为:SELECT[t0].[ProductID],[t0].[ProductName],[t0].[SupplierID],[t0].[CategoryID],[t0].[QuantityPerUn
4、it],[t0].[UnitPrice],[t0].[UnitsInStock],[t0].[UnitsOnOrder],[t0].[ReorderLevel],[t0].[Discontinued]FROM[dbo].[Products]AS[t0]LEFTOUTERJOIN[dbo].[Suppliers]AS[t1]ON[t1].[SupplierID]=[t0].[SupplierID]WHERE([t1].[Country]=@p0)AND([t0].[UnitsInStock]=@p1)--@
5、p0:InputNVarChar(Size=3;Prec=0;Scale=0)[USA]--@p1:InputInt(Size=0;Prec=0;Scale=0)[0]2.多对多关系(ManytoMany):varq=fromeindb.Employeesfrometine.EmployeeTerritorieswheree.City=="Seattle"selectnew{e.FirstName,e.LastName,et.Territory.TerritoryDescription};说明:多对多关系
6、一般会涉及三个表(如果有一个表是自关联的,那有可能只有2个表)。这一句语句涉及Employees,EmployeeTerritories,Territories三个表。它们的关系是1:M:1。Employees和Territories没有很明确的关系。语句描述:这个例子在From子句中使用外键导航筛选在西雅图的雇员,同时列出其所在地区。这条生成SQL语句为:SELECT[t0].[FirstName],[t0].[LastName],[t2].[TerritoryDescription]FROM[dbo]
7、.[Employees]AS[t0]CROSSJOIN[dbo].[EmployeeTerritories]AS[t1]INNERJOIN[dbo].[Territories]AS[t2]ON[t2].[TerritoryID]=[t1].[TerritoryID]WHERE([t0].[City]=@p0)AND([t1].[EmployeeID]=[t0].[EmployeeID])--@p0:InputNVarChar(Size=7;Prec=0;Scale=0)[Seattle]3.自联接关系:v
8、arq=frome1indb.Employeesfrome2ine1.Employeeswheree1.City==e2.Cityselectnew{FirstName1=e1.FirstName,LastName1=e1.LastName,FirstName2=e2.FirstName,LastName2=e2.LastName,e1.City};语句描述:这个例子在select子句中使用外键导航筛选成对的雇员,每对中一个雇