快速业务通道

LINQ体验(18)——LINQ to SQL语句之视图和继承支持

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
"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;

初步学习,我们还是看看生成的SQL语句,这样容易理解。在 SQL语句中查询了ContactType为Customer的联系方式。

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;

生成的SQL语句 如下:查询了ContactType为Shipper的联系方式。大致一看好像很上面的一样, 其实这里查询出来的列多了很多。实际上是Contacts表的全部字段。

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;

生成SQL语句如下:查 询整个Contacts表。

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形式

使用Case形式 查找出在伦敦的顾客的联系方式。

var cons = from c in db.Contacts
      where c.ContactType == "Customer" &&
           ((CustomerContact)c).City == "London"
      select c;

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号