- 浏览: 59990 次
- 性别:
- 来自: 北京
最新评论
-
chungle:
hatedance 写道这个page method返回的是ht ...
使用 jQuery 调用 ASP.NET AJAX Page Method -
hatedance:
这个page method返回的是html片段吗?也就是说只能 ...
使用 jQuery 调用 ASP.NET AJAX Page Method
LINQ to SQL 支持单表映射,其整个继承层次结构存储在单个数据库表中。该表包含整个层次结构的所有可能数据列的平展联合。(联合是将两个表组合成一个表的结果,组合后的表包含任一原始表中存在的行。)每行中不适用于该行所表示的实例类型的列为 null。 下面为了演示下面的几个例子,我们在O/R设计器内设计如下图所示的类及其继承关系。 我们学习的时候还是看看其生成的代码吧! 具体设置映射继承层次结构有如下几步: 下面是这张图生成的代码的框架(由于生成的代码太多,我删除了很多“枝叶”,仅仅保留了主要的框架用于指出其实质的东西):
日常我们经常写的形式,对单表查询。 这里我仅仅让其返回顾客的联系方式。 初步学习,我们还是看看生成的SQL语句,这样容易理解。在SQL语句中查询了ContactType为Customer的联系方式。 这个例子查找一下发货人的联系方式。 生成的SQL语句如下:查询了ContactType为Shipper的联系方式。大致一看好像很上面的一样,其实这里查询出来的列多了很多。实际上是Contacts表的全部字段。 这个例子就通吃了,全部查找了一番。 生成SQL语句如下:查询整个Contacts表。 使用Case形式查找出在伦敦的顾客的联系方式。 生成SQL语句如下,自己可以看懂了。 当插入一条记录时,使用默认的映射关系了,但是在查询时,使用继承的关系了。具体看看生成的SQL语句就直截了当了。 生成SQL语句如下: 这个例子说明如何插入发货人的联系方式的一条记录。 生成SQL语句如下:继承支持
单表映射策略是最简单的继承表示形式,为许多不同类别的查询提供了良好的性能特征,如果我们要在 LINQ to SQL 中实现这种映射,必须在继承层次结构的根类中指定属性 (Attribute) 和属性 (Attribute) 的属性 (Property)。我们还可以使用O/R设计器来映射继承层次结构,它自动生成了代码。
[Table(Name = "dbo.Contacts")]
[InheritanceMapping(Code = "Unknown", Type = typeof(Contact),
IsDefault = true)]
[InheritanceMapping(Code = "Employee", Type = typeof(EmployeeContact))]
[InheritanceMapping(Code = "Supplier", Type = typeof(SupplierContact))]
[InheritanceMapping(Code = "Customer", Type = typeof(CustomerContact))]
[InheritanceMapping(Code = "Shipper", Type = typeof(ShipperContact))]
public partial class Contact :
INotifyPropertyChanging, INotifyPropertyChanged
{
[Column(Storage = "_ContactID",IsPrimaryKey = true,
IsDbGenerated = true)]
public int ContactID{ }
[Column(Storage = "_ContactType",IsDiscriminator = true)]
public string ContactType{ }
}
public abstract partial class FullContact : Contact{ }
public partial class EmployeeContact : FullContact{ }
public partial class SupplierContact : FullContact{ }
public partial class CustomerContact : FullContact{ }
public partial class ShipperContact : Contact{ }
1.一般形式
var cons = from c in db.Contacts
select c;
foreach (var con in cons) {
Console.WriteLine("Company name: {0}", con.CompanyName);
Console.WriteLine("Phone: {0}", con.Phone);
Console.WriteLine("This is a {0}", con.GetType());
}
2.OfType形式
var cons = from c in db.Contacts.OfType<CustomerContact>()
select c;
SELECT [t0].[ContactType], [t0].[ContactName], [t0].[ContactTitle],
[t0].[Address],[t0].[City], [t0].[Region], [t0].[PostalCode],
[t0].[Country], [t0].[Fax],[t0].[ContactID], [t0].[CompanyName],
[t0].[Phone] FROM [dbo].[Contacts] AS [t0]
WHERE ([t0].[ContactType] = @p0) AND ([t0].[ContactType] IS NOT NULL)
-- @p0: Input NVarChar (Size = 8; Prec = 0; Scale = 0) [Customer]
3.IS形式
var cons = from c in db.Contacts
where c is ShipperContact
select c;
SELECT [t0].[ContactType], [t0].[ContactID], [t0].[CompanyName],
[t0].[Phone],[t0].[HomePage], [t0].[ContactName],
[t0].[ContactTitle], [t0].[Address], [t0].[City],
[t0].[Region], [t0].[PostalCode], [t0].[Country],
[t0].[Fax],[t0].[PhotoPath], [t0].[Photo], [t0].[Extension]
FROM [dbo].[Contacts] AS [t0] WHERE ([t0].[ContactType] = @p0)
AND ([t0].[ContactType] IS NOT NULL)
-- @p0: Input NVarChar (Size = 7; Prec = 0; Scale = 0) [Shipper]
4.AS形式
var cons = from c in db.Contacts
select c as FullContact;
SELECT [t0].[ContactType], [t0].[HomePage], [t0].[ContactName],
[t0].[ContactTitle],[t0].[Address], [t0].[City],
[t0].[Region], [t0].[PostalCode], [t0].[Country],
[t0].[Fax], [t0].[ContactID], [t0].[CompanyName],
[t0].[Phone], [t0].[PhotoPath],[t0].[Photo], [t0].[Extension]
FROM [dbo].[Contacts] AS [t0]
5.Cast形式
var cons = from c in db.Contacts
where c.ContactType == "Customer" &&
((CustomerContact)c).City == "London"
select c;
SELECT [t0].[ContactType], [t0].[ContactID], [t0].[CompanyName],
[t0].[Phone], [t0].[HomePage],[t0].[ContactName],
[t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],
[t0].[PostalCode], [t0].[Country], [t0].[Fax], [t0].[PhotoPath],
[t0].[Photo], [t0].[Extension]FROM [dbo].[Contacts] AS [t0]
WHERE ([t0].[ContactType] = @p0) AND ([t0].[City] = @p1)
-- @p0: Input NVarChar (Size = 8; Prec = 0; Scale = 0) [Customer]
-- @p1: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]
6.UseAsDefault形式
//插入一条数据默认使用正常的映射关系
Contact contact = new Contact()
{
ContactType = null,
CompanyName = "Unknown Company",
Phone = "333-444-5555"
};
db.Contacts.InsertOnSubmit(contact);
db.SubmitChanges();
//查询一条数据默认使用继承映射关系
var con =
(from c in db.Contacts
where c.CompanyName == "Unknown Company" &&
c.Phone == "333-444-5555"
select c).First();
INSERT INTO [dbo].[Contacts]([ContactType], [CompanyName],
[Phone]) VALUES (@p0, @p1, @p2)
SELECT TOP (1) [t0].[ContactType], [t0].[ContactID],
[t0].[CompanyName], [t0].[Phone],[t0].[HomePage],
[t0].[ContactName], [t0].[ContactTitle], [t0].[Address],
[t0].[City],[t0].[Region], [t0].[PostalCode], [t0].[Country],
[t0].[Fax], [t0].[PhotoPath],[t0].[Photo], [t0].[Extension]
FROM [dbo].[Contacts] AS [t0]
WHERE ([t0].[CompanyName] = @p0) AND ([t0].[Phone] = @p1)
-- @p0: Input NVarChar (Size = 15; Prec = 0; Scale = 0)
[Unknown Company]
-- @p1: Input NVarChar (Size = 12; Prec = 0; Scale = 0)
[333-444-5555]
7.插入新的记录
//1.在插入之前查询一下,没有数据
var ShipperContacts =
from sc in db.Contacts.OfType<ShipperContact>()
where sc.CompanyName == "Northwind Shipper"
select sc;
//2.插入数据
ShipperContact nsc = new ShipperContact()
{
CompanyName = "Northwind Shipper",
Phone = "(123)-456-7890"
};
db.Contacts.InsertOnSubmit(nsc);
db.SubmitChanges();
//3.查询数据,有一条记录
ShipperContacts =
from sc in db.Contacts.OfType<ShipperContact>()
where sc.CompanyName == "Northwind Shipper"
select sc;
//4.删除记录
db.Contacts.DeleteOnSubmit(nsc);
db.SubmitChanges();
SELECT COUNT(*) AS [value] FROM [dbo].[Contacts] AS [t0]
WHERE ([t0].[CompanyName] = @p0) AND ([t0].[ContactType] = @p1)
AND ([t0].[ContactType] IS NOT NULL)
-- @p0: Input NVarChar [Northwind Shipper]
-- @p1: Input NVarChar [Shipper]
INSERT INTO [dbo].[Contacts]([ContactType], [CompanyName], [Phone])
VALUES (@p0, @p1, @p2)
-- @p0: Input NVarChar [Shipper]
-- @p1: Input NVarChar [Northwind Shipper]
-- @p2: Input NVarChar [(123)-456-7890]
SELECT COUNT(*) AS [value] FROM [dbo].[Contacts] AS [t0]
WHERE ([t0].[CompanyName] = @p0) AND ([t0].[ContactType] = @p1)
AND ([t0].[ContactType] IS NOT NULL)
-- @p0: Input NVarChar [Northwind Shipper]
-- @p1: Input NVarChar [Shipper]
DELETE FROM [dbo].[Contacts] WHERE ([ContactID] = @p0) AND
([ContactType] = @p1) AND ([CompanyName] = @p2) AND ([Phone] = @p3)
-- @p0: Input Int [159]
-- @p1: Input NVarChar [Shipper]
-- @p2: Input NVarChar [Northwind Shipper]
-- @p3: Input NVarChar [(123)-456-7890]
-- @p4: Input NVarChar [Unknown]
-- @p5: Input NVarChar (Size = 8; Prec = 0; Scale = 0) [Supplier]
-- @p6: Input NVarChar (Size = 7; Prec = 0; Scale = 0) [Shipper]
-- @p7: Input NVarChar (Size = 8; Prec = 0; Scale = 0) [Employee]
-- @p8: Input NVarChar (Size = 8; Prec = 0; Scale = 0) [Customer]
发表评论
-
LINQ简介
2009-06-10 16:58 644查询表达式(LINQ)简介 在上两篇我介绍了C#3. ... -
LINQ to SQL语句(23)之动态查询
2009-06-10 16:55 1293动态查询 有这样一 ... -
LINQ to SQL语句(22)之DataContext
2009-06-10 16:54 696DataContext DataContext作 ... -
LINQ to SQL语句(21)之用户定义函数
2009-06-10 16:52 705用户定义函数 我们 ... -
LINQ to SQL语句(20)之存储过程
2009-06-10 16:51 721存储过程 在我们编写程序中,往往需要一些存储过程,在 ... -
LINQ to SQL语句(19)之ADO.NET与LINQ to SQL
2009-06-10 16:50 791ADO.NET与LINQ to SQL 它基于由 A ... -
LINQ to SQL语句(18)之运算符转换
2009-06-10 16:49 865运算符转换 1.AsEnumerable:将类型转换为泛 ... -
LINQ to SQL语句(17)之对象加载
2009-06-10 16:48 590对象加载 延迟加载 在查询某对象时,实际上你只查询该对 ... -
LINQ to SQL语句(16)之对象标识
2009-06-10 16:47 521对象标识 运行库中的对象具有唯一标识。引用同一 ... -
LINQ to SQL语句(15)之String
2009-06-10 16:46 791字符串(String) LINQ t ... -
LINQ to SQL语句(14)之Null语义和DateTime
2009-06-10 16:46 915Null语义 说明:下面第一个例子说明查询Reports ... -
LINQ to SQL语句(13)之开放式并发控制和事务
2009-06-10 16:45 721Simultaneous Changes开放 ... -
LINQ to SQL语句(12)之Delete和使用Attach
2009-06-10 16:44 755删除(Delete) 1.简单形式 说明:调用Dele ... -
LINQ to SQL语句(11)之Update
2009-06-10 16:43 788更新(Update) 说明:更新操作,先获取对象,进行修 ... -
LINQ to SQL语句(10)之Insert
2009-06-10 16:42 786插入(Insert) 1.简单形式 说明:new一个对 ... -
LINQ to SQL语句(9)之Top/Bottom和Paging和SqlMethods
2009-06-10 16:42 1017Top/Bottom操作 适用场景:适量的取出自己想要的 ... -
LINQ to SQL语句(8)之Concat/Union/Intersect/Except
2009-06-10 16:41 1044Concat/Union/Intersect/Ex ... -
LINQ to SQL语句(7)之Exists/In/Any/All/Contains
2009-06-10 16:39 1403Exists/In/Any/All/Contains操 ... -
LINQ to SQL语句(6)之Group By/Having
2009-06-10 16:38 1084Group By/Having操作符 适用场景:分组 ... -
LINQ to SQL语句(5)之Order By
2009-06-10 16:36 1036Order By操作 适用场景:对查询出的语句进行 ...
相关推荐
由于LINQ延迟执行,直到你真正遍历结果集时才会执行SQL语句。 ```csharp foreach (var customer in pagedQuery) { // 处理每个customer对象 } ``` 5. **优化性能**:在某些情况下,为了提高性能,你可能需要...
Linq to Sql语句详解,讲述了Linq to Sql语法详解,包括Linq to sql的动态语句,和继承的应用。还有在分层结构情况下的应用。
- **日志功能**:DataContext支持日志记录,可以通过设置Log属性将查询转换的SQL语句和执行结果输出到日志,方便调试和性能分析。 3. LINQ to SQL的操作 - **查询**:使用查询表达式或方法语法,可以从...
LINQ to SQL是.NET Framework提供的一种ORM(对象关系映射)技术,它允许开发者使用C#或VB.NET的查询语法来操作数据库,将SQL语句转化为直观的面向对象的代码。在LINQ to SQL中,`DataContext`是一个核心组件,它是...
4. **性能优化**:由于编译器会生成高效的SQL语句,因此在大多数情况下,性能接近于手写的SQL。 5. **简化异步操作**:通过与.NET Framework的异步编程模型相结合,LINQ to SQL支持异步查询,提高多线程环境下的...
**LINQ to SQL 详细教程** LINQ (Language Integrated Query) 是 .NET Framework 中的一项技术,它允许开发者使用类似 SQL 的语法在各种数据源上进行查询,包括对象集合、XML、SQL 数据库等。其中,LINQ to SQL 是...
**LINQ to SQL** 是 .NET Framework 中的一种技术,它允许开发者使用.NET语言(如C#或VB.NET)直接对SQL数据库进行查询,无需编写大量的SQL语句。这个框架是微软在.NET 3.5 SP1版本中引入的,旨在简化数据访问层的...
3. **动态查询转换**:当应用程序运行时,**LINQ to SQL**会自动将对象模型中的查询转换为SQL语句,并发送到数据库执行;当数据库返回结果时,它又会将这些结果转换为对象,方便开发人员进一步处理。 #### 二、LINQ...
3. **表达式树**:在LINQ中,表达式树用于表示可执行的代码,特别是在动态查询时,它们能被解析并转换为SQL语句。 4. **动态查询**:允许在运行时构建和执行查询,这对于处理不确定的查询条件或生成复杂的动态SQL...
- **提高生产力**:由于减少了编写SQL语句的需求,LINQ to SQL可以显著提高开发效率。 - **减少错误**:使用LINQ to SQL可以减少常见的SQL注入攻击风险,因为所有的查询都通过C#编译器进行类型检查。 - **易于...
Linq to SQL的优势在于其直观的语法,使得开发者能用面向对象的方式来处理数据库操作,而无需编写复杂的SQL语句。它支持延迟加载,自动跟踪变化,提供事务处理等特性,极大地提高了开发效率。然而,随着Entity ...
LINQ还包括其他几个部分,如Linq to xml、Linq to objects、Linq to dataset以及Linq to entities,这些都为开发者提供了强大的数据处理能力。 在学习Linq to sql之前,我们需要掌握一些预备知识: 1. **隐含类型...
一步一步学Linq to sql(八):继承与关系 60 一步一步学Linq to sql(九):其它补充 69 一步一步学Linq to sql(十):分层构架的例子 73 Linq To Xml学习 80 Linq To Xml学习 - 1. 概述 80 Linq To Xml学习 - 2...
传统的数据访问方式往往繁琐且易错,因为它们需要开发者手动编写大量的SQL语句和复杂的对象关系映射(Object-Relational Mapping, ORM)逻辑。为了解决这一问题,Microsoft 推出了两种工具——LINQ to SQL 和 ADO...
LINQ to SQL是针对关系数据库的特定实现,提供了将SQL查询语句转化为C#或VB.NET代码的能力,简化了与数据库的交互。 **二、 LINQ to SQL 的工作原理** LINQ to SQL通过ORM(对象关系映射)机制将数据库表映射为.NET...