当前位置:首页 » 编程语言 » 创建linqtosql

创建linqtosql

发布时间: 2022-06-27 08:55:36

Ⅰ 未将对象引用设置到对象的实例。

未将对象引用设置到对象的实例=BUG。如果别人给你一个你未预料到的null值,抛出一个ArgumentNullException以帮助别人定位BUG。如果你预料到会有null值,那么修改你的程序来容许null值以避免昂贵的异常抛出过程。
调用CreateInstance之前检查Assembly.Load(path)的返回值
转换之前检查Assembly.CreateInstance的返回值
调用GetCategories之前检查CreateCategory的返回值

Ⅱ vs2008做个c#的系统,数据库sql Server2005。问怎么在SQLServer2005建立一个数据库然后连接到c#系统

这个问题问得很奇怪。
是程序去连数据库,数据库一直在那里。而不是数据库去连程序。
程序中
string connStr
= "Data Source = .;Initial Catalog = ADONETTest;Integrated Security = True";
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();//建立连接
注意connStr中写明了数据库服务器的位置、数据库的名字、访问时的用户名和密码等信息。

Ⅲ 用 linq to sql 多表查询 可以绑定到DataGridView上面吗(不要新建实体)

这个不可以,linq to sql查询出来的结果集类型为IQueryable<T>,而这种结果集的类型不是DataGridView的类型,DataGridView需要的数据源类型为DataTable,View等类型

Ⅳ 如何使用NUnit测试数据库相关代码

[Test]public void YourTest() {
using (TransactionScope scope = new TransactionScope())
{
// your test code here
}}

由于没有告诉TransactionScope提交,它将自动回滚。即使断言失败或引发其他异常,它也能工作。
另一种方法是使用设置创建TransactionScope和拆下叫处理。它减少了一些代码重复,但完成了同样的任务。
[TestFixture]public class YourFixture{
private TransactionScope scope;

[SetUp]
public void SetUp()
{
scope = new TransactionScope();
}

[TearDown]
public void TearDown()
{
scope.Dispose();
}

[Test]
public void YourTest()
{
// your test code here
}}

这与单个测试中的Using语句一样安全,因为NUnit将保证调用teardown。
话虽如此,我确实认为命中数据库的测试并不是真正的单元测试。我仍然编写它们,但我认为它们是集成测试。我仍然认为它们提供了价值。我经常使用它们的一个地方是测试LINQtoSQL代码。

Ⅳ linqtosql怎么动态的映射一个数据库

1、映射数据库
映射数据库主要通过Database属性来指定,引用命名空间System.Data.Linq.Mapping;
具体看如下代码:

//这里在连接的时候 如果MyDatabase不指定Database属性,生成的数据库名为MyDbContext类名
//如果指定,则为Database属性里的名称,在这里生成的数据库名为IThinks
[Database(Name = "IThinks")]
public class MyDbContext : DataContext
{
//必须构建此表,不然创建数据库时会提示没有表,无法创建。
public Table<LoginUser> LoginUsers;
public Table<UserBaseInfo> UserBaseInfos;
public Table<Aritcal> Articals;
public MyDbContext(string connection) : base(connection)
{
}

Ⅵ C#数据库入门经典的C# 2008数据库入门经典(第4版)

作者:阿格沃尔 , 哈德莱斯顿
翻译:沈洁 , 杨华
出版社: 清华大学出版社; 第4版 (2009年3月1日)
平装: 373页
正文语种: 汉语
开本: 16
ISBN: 7302196281, 9787302196280
条形码: 9787302196280
产品尺寸及重量: 25.8 x 18.2 x 1.8 cm ; 662 g 《C# 2008数据库入门经典(第4版) 》着重介绍了使用C# 2008作为开发工具,与最新发布的Visual Studio 2008及.NET Framework 3.5一起访问数据库。《C# 2008数据库入门经典(第4版)》介绍了使用SQL Server 2005进行数据库编程的所有知识,将数据“拉”到使用C# 2008开发的应用程序中。在学习《C# 2008数据库入门经典(第4版)》的过程中,通过创建“试一试”部分的示例应用程序,可以实践所学的知识。它将帮助您将所学内容应用于实际应用程序中。“示例说明”解释了示例应用程序的每个代
码语句以帮助您进行理解。作者希望您不仅能够掌握C# 2008的知识,还能够学到SQLServer 2005的知识。《C# 2008数据库入门经典(第4版)》介绍了相当多的数据库概念,包括基本知识、SQL Server 2005的T-SQL新功能。《C# 2008数据库入门经典(第4版)》将帮助您逐步提升代码编写能力,所以我们将从简单的主题讲起,逐步过渡到复杂主题。首先介绍基本应用程序开发,然后是LINQ和ADO.NET 3.5的概念,以及使用它们构建应用程序。
作者相信《C# 2008数据库入门经典(第4版)》能有助于您提高数据库应用开发的能力。 作者:(美国)阿格沃尔 (美国)哈德莱斯顿 译者:沈洁 杨华
idya Vrat Agarwal,是一位纯Microsoft NET主义者,拥有MCT、MCPD、MCTS、MCSD.NET、MCAD.NET和MCSD等认证,他在莱博智科技(Lionbridge Technologies公司工作。同时,又是印度计算机科学院的终身会员。他最初从事Microsoft.NET测试版本的工作,之后涉足软件开发、技术推广、技术顾问、公司培训的工作和为不同客户开发基于Microsoft.NET的T3项目。可以在www. Programmers Heaven Com上阅读到他的文章。他还在www. U Certify com上对.NET Preparation Kits作了评论。 第1章 开发工具
1.1 获取VisualStudio2008
1.2 安装
1.3 安装Northwind样本数据库
1.3.1 安装Northwind创建脚本
1.3.2 创建Northwind样本数据库
1.4 安装AdventureWorks样本数据库
1.4.1 安装AdventureWorks创建脚本
1.4.2 创建AdventureWorks样本数据库
1.5 小结
第2章 使用开发工具
2.1 不同版本Microsoft.NETFramework与代码库模型
2.2 使用MicrosoftVisualStudio2008
2.3 使用
2.4 小结
第3章 理解关系数据库
3.1 数据库的概念
3.2 电子数据表和数据库的选择
3.3 使用数据库的原因
3.4 使用关系型数据库管理系统的优势
3.5 桌面RDBMS和服务器RDBMS的比较
3.5.1 桌面数据库
3.5.2 服务器数据库
3.6 数据库的生命周期
3.7 映射基数
3.8 键的理解
3.8.1 主键
3.8.2 外键
3.9 理解数据完整性
3.9.1 实体完整性
3.9.2 引用完整性
3.1 0规范化概念
3.1 1规范化的缺陷
3.1 2小结
第4章 编写数据库查询
4.1 比较QBE与SQL
4.2 查询
4.3 通用表表达式
4.4 GROUPBY子句
4.5 PIVOT运算符
4.6 ROW_NUMBER()函数
4.7 PARTITIONBY子句
4.8 模式匹配
4.9 合计函数
4.1 0DATETIME日期函数
4.1 1连接
4.1 1.1 内连接
4.1 1.2 外连接
4.1 1.3 其他连接
4.1 2小结
第5章 操纵数据库数据
5.1 检索数据
5.1.1 使用WHERE子句
5.1.2 数据排序
5.2 使用SELECTINTO语句
5.3 插入数据
5.4 更新数据
5.5 删除数据
5.6 小结
第6章 使用存储过程
6.1 创建存储过程
6.2 修改存储过程
6.3 显示存储过程的定义
6.4 重命名存储过程
6.5 在C#中使用存储过程
6.6 删除存储过程
6.7 小结
第7章 使用XML
7.1 XML的定义
7.2 选择XML的原因
7.3 将数据存储为XML格式的好处
7.4 理解XML文档
7.5 理解XML声明
7.6 将关系型数据转换为XML
7.6.1 使用FORXMLRAW模式
7.6.2 使用FORXMLAUTO
7.7 使用xml数据类型
7.8 小结
第8章 了解事务
8.1 事务的概念
8.2 何时使用事务
8.3 理解ACID属性
8.4 事务设计
8.5 事务状态
8.6 指定事务界限
8.7 在事务中允许使用的T-SQL语句
8.8 SQLServer2005中的本地事务
8.9 SQLServer2005中的分布式事务
8.1 0编写高效事务的准则
8.1 1如何编写事务
8.1 1.1 在T-SQL中编写事务
8.1 1.2 在ADO.NET中编写事务
8.1 2小结
第9章 ADO.NET简介
9.1 了解ADO.NET
9.2 开发ADO.NET的原因
9.3 从ADO到ADO.NET
9.3.1 ADO.NET并非ADO的新版本
9.3.2 ADO.NET和.NET基类库
9.4 理解ADO.NET体系结构
9.5 使用SQLServer数据提供程序
9.6 使用OLEDB数据提供程序
9.7 使用ODBC数据提供程序
9.8 数据提供程序是API
9.9 小结
第10章 创建连接
10.1 数据提供程序连接类概述
10.2 使用SqlConnection连接到SQLServerExpress
10.2.1 调试到SQLServer的连接
10.2.2 SqlConnection中的安全与口令
10.2.3 使用SQLServer安全机制
10.2.4 SqlConnection中的连接字符串参数
10.2.5 连接池
10.3 连接对象的进阶用法
10.3.1 在连接构造函数中使用连接字符串
10.3.2 显示连接信息
10.4 用OleDbConnection连接到SSE
10.5 小结
第11章 执行命令
11.1 创建命令
11.1.1 关联命令与连接
11.1.2 设置Command对象的文本
11.2 执行命令
11.3 执行具有多个结果的命令
11.4 执行语句
11.5 命令参数
11.6 小结
第12章 数据读取器
12.1 数据读取器概述
12.1.1 使用序数索引器
12.1.2 使用列名索引器
12.1.3 使用类型访问器方法
12.2 获取数据的信息
12.3 获取表的数据
12.4 使用数据读取器处理多个结果集
12.5 小结
第13章 使用数据集和数据适配器
13.1 理解对象模型
13.1.1 数据集与数据读取器
13.1.2 数据集概述
13.1.3 数据适配器概述
13.1.4 DataTable、DataColumn和DataRow对象概述
13.2 使用数据集和数据适配器
13.2.1 数据集的筛选和排序
13.2.2 比较FilterSort和PopDataSet
13.2.3 使用数据视图
13.2.4 修改数据集中的数据
13.3 将变化保存到数据源中
13.4 并发
13.5 使用数据集和XML
13.6 在没有数据集的情况下使用数据表
13.7 理解有类型和无类型的数据集
13.8 小结
第14章 构建WindowsForms应用程序
14.1 理解WindowsForms
14.2 用户界面设计原则
14.3 用户界面设计的最佳实践
14.4 利用WindowsForms
14.5 理解设计视图和代码视图
14.6 属性窗口中的排序属性
14.6.1 分类视图
14.6.2 按字母顺序排列的视图
14.7 设置解决方案、项目和WindowsForms属性
14.8 利用控件
14.9 设置Dock和Anchor属性
14.9.1 Dock属性
14.9.2 Anchor属性
14.1 0为项目添加新窗体
14.1 1实现MDI窗体
14.1 2小结
第15章 构建ASP.NET应用程序
15.1 理解Web功能
15.1.1 Web服务器
15.1.2 Web浏览器和HTTP
15.2 ASP.NET和Web页面概述
15.3 理解VisualStudio2008
Web站点类型
15.3.1 文件系统Web站点
15.3.2 FTPWeb站点
15.3.3 HTTPWeb站点
15.4 ASP.NETWeb站点布局
15.4.1 Web页面
15.4.2 应用程序文件夹
15.4.3 Web.config文件
15.5 使用Master页面
15.6 小结
第16章 处理异常
16.1 处理ADO.NET异常
16.2 处理数据库异常
16.3 小结
第17章 处理事件
17.1 理解事件
17.2 事件的属性
17.3 设计事件
17.4 控件引发的通用事件
17.5 事件生成器和使用者
17.6 小结1
第18章 使用文本和二进制数据
18.1 理解SQLServer文本和二进制数据类型
18.2 在数据库中存储图像
18.3 从数据库中检索图像
18.4 处理文本数据
18.5 小结
第19章 使用LINQ
19.1 LINQ概述
19.2 LINQ的体系结构
19.3 LINQ的项目结构
19.4 使用LINQtoObjects
19.5 使用LINQtoSQL
19.6 使用LINQtoXML
19.7 小结
第20章 使用ADO.NET3.5
20.1 理解ADO.NET3.5 EntityFramework
20.2 理解实体数据模型
20.3 利用实体数据模型
20.4 小结 由于大多数实际应用程序都要与存储在关系数据库中的数据进行交互,因此每个C#程序员需要知道如何访问数据。本书主要介绍了如何使用C#2008与SQL Server 2005交互。还介绍了.NET Framework 3.5最令人激动的功能LINQ和ADO.NET 3.5。相比于纯数据库概念的书来说,本书阐明数据库概念的章节将能更好地帮助您理解。本书还涉及了SQL Server 2005中的很多T-SQL新功能。
本书采用的编写方式是编程新手容易理解的,而编程高手也能从本书受益。如果您想要使用Visual Studio 2008创建数据库应用程序,那么本书就非常适合您。本书不但介绍了应用程序开发人员可能使用的所有概念,还讲解了在示例程序中使用的每一行代码。
本书采用的组织方式是先帮助您打下牢固的基础,然后进一步学习高级技能。
本书读者对象
如果您是一位喜欢使用C#语言访问数据库的应用程序开发人员,那本书非常适合您,因为它介绍了使用C#2008进行SQL Server 2005编程。
本书不要求读者事先了解C#2.0、SQL Server 2000和数据库的概念。本书已经包含了其他书籍要求读者学前需具备的所有基础知识。
本书是任何想使用C#2008与数据库进行交互的应用程序开发人员所应必备的。如果您就是其中一员,那本书将是您不可或缺的。本书内容简介
本书包含了Visual Studio 2008、SQL Server 2005、C#2008、LINQ和ADO.NET 3.5等内容。所有这些主题都是以章的形式出现,并使用了不同的概念和代码示例作了解释。本书中的应用程序都是模仿了现实生活中的应用程序,因此通过对本书的学习,您可以在工作中利用这些概念。

Ⅶ 关于LINQforNwind的示例

给你一个LinqToEF 的例子吧 希望能帮到你

配置文件(连接字符串):
<connectionStrings>
<add name="TempConStr" connectionString="Data Source = Address;DataBase = Temp;User Id = ??;Password =?? " /> --这个是LinqToSql 的链接字符串
<add name="TempEntities" connectionString="metadata=res://*/Models.Temp.csdl|res://*/Models.Temp.ssdl|res://*/Models.Temp.msl;provider=System.Data.SqlClient;provider connection string="data source=Address;initial catalog=Temp;user id=??;Password = woshiwei1;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> --这个是LinqToEF 的链接字符串

--数据模型 --可以用VS 自动生成
using System;
using System.Data.Linq.Mapping;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
using System.Data.EntityClient;
using System.ComponentModel;
using System.Xml.Serialization;
using System.Runtime.Serialization;

[assembly: EdmSchemaAttribute()]
#region EDM 关系源元数据

[assembly: EdmRelationshipAttribute("TempModel", "FK_Purchase_Customers", "Customer", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(SimpleMvc.Models.Customer), "Purchase", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(SimpleMvc.Models.Purchase), true)]

#endregion

namespace SimpleMvc.Models
{
#region 上下文

/// <summary>
/// 没有元数据文档可用。
/// </summary>
public partial class TempEntities1 : ObjectContext
{
#region 构造函数

/// <summary>
/// 请使用应用程序配置文件的“TempEntities1”部分中的连接字符串初始化新 TempEntities1 对象。
/// </summary>
public TempEntities1() : base("name=TempEntities1", "TempEntities1")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}

/// <summary>
/// 初始化新的 TempEntities1 对象。
/// </summary>
public TempEntities1(string connectionString) : base(connectionString, "TempEntities1")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}

/// <summary>
/// 初始化新的 TempEntities1 对象。
/// </summary>
public TempEntities1(EntityConnection connection) : base(connection, "TempEntities1")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}

#endregion

#region 分部方法

partial void OnContextCreated();

#endregion

#region ObjectSet 属性

/// <summary>
/// 没有元数据文档可用。
/// </summary>
public ObjectSet<Customer> Customer
{
get
{
if ((_Customer == null))
{
_Customer = base.CreateObjectSet<Customer>("Customer");
}
return _Customer;
}
}
private ObjectSet<Customer> _Customer;

/// <summary>
/// 没有元数据文档可用。
/// </summary>
public ObjectSet<Purchase> Purchase
{
get
{
if ((_Purchase == null))
{
_Purchase = base.CreateObjectSet<Purchase>("Purchase");
}
return _Purchase;
}
}
private ObjectSet<Purchase> _Purchase;

#endregion
#region AddTo 方法

/// <summary>
/// 用于向 Customer EntitySet 添加新对象的方法,已弃用。请考虑改用关联的 ObjectSet<T> 属性的 .Add 方法。
/// </summary>
public void AddToCustomer(Customer customer)
{
base.AddObject("Customer", customer);
}

/// <summary>
/// 用于向 Purchase EntitySet 添加新对象的方法,已弃用。请考虑改用关联的 ObjectSet<T> 属性的 .Add 方法。
/// </summary>
public void AddToPurchase(Purchase purchase)
{
base.AddObject("Purchase", purchase);
}

#endregion
}

#endregion

#region 实体

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[EdmEntityTypeAttribute(NamespaceName="TempModel", Name="Customer")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
[Table]
public partial class Customer : EntityObject
{
#region 工厂方法

/// <summary>
/// 创建新的 Customer 对象。
/// </summary>
/// <param name="id">Id 属性的初始值。</param>
/// <param name="name">Name 属性的初始值。</param>
public static Customer CreateCustomer(global::System.Int32 id, global::System.String name)
{
Customer customer = new Customer();
customer.Id = id;
customer.Name = name;
return customer;
}

#endregion
#region 基元属性

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
[DataMemberAttribute()]
[Column]
public global::System.Int32 Id
{
get
{
return _Id;
}
set
{
if (_Id != value)
{
OnIdChanging(value);
ReportPropertyChanging("Id");
_Id = StructuralObject.SetValidValue(value);
ReportPropertyChanged("Id");
OnIdChanged();
}
}
}
private global::System.Int32 _Id;
partial void OnIdChanging(global::System.Int32 value);
partial void OnIdChanged();

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
[Column]
public global::System.String Name
{
get
{
return _Name;
}
set
{
OnNameChanging(value);
ReportPropertyChanging("Name");
_Name = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("Name");
OnNameChanged();
}
}
private global::System.String _Name;
partial void OnNameChanging(global::System.String value);
partial void OnNameChanged();

#endregion

#region 导航属性

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[XmlIgnoreAttribute()]
[SoapIgnoreAttribute()]
[DataMemberAttribute()]
[("TempModel", "FK_Purchase_Customers", "Purchase")]
public EntityCollection<Purchase> Purchase
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<Purchase>("TempModel.FK_Purchase_Customers", "Purchase");
}
set
{
if ((value != null))
{
((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<Purchase>("TempModel.FK_Purchase_Customers", "Purchase", value);
}
}
}

#endregion
}

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[EdmEntityTypeAttribute(NamespaceName="TempModel", Name="Purchase")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Purchase : EntityObject
{
#region 工厂方法

/// <summary>
/// 创建新的 Purchase 对象。
/// </summary>
/// <param name="id">Id 属性的初始值。</param>
/// <param name="customerId">CustomerId 属性的初始值。</param>
/// <param name="description">Description 属性的初始值。</param>
/// <param name="price">Price 属性的初始值。</param>
public static Purchase CreatePurchase(global::System.Int32 id, global::System.Int32 customerId, global::System.String description, global::System.Decimal price)
{
Purchase purchase = new Purchase();
purchase.Id = id;
purchase.CustomerId = customerId;
purchase.Description = description;
purchase.Price = price;
return purchase;
}

#endregion
#region 基元属性

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Int32 Id
{
get
{
return _Id;
}
set
{
if (_Id != value)
{
OnIdChanging(value);
ReportPropertyChanging("Id");
_Id = StructuralObject.SetValidValue(value);
ReportPropertyChanged("Id");
OnIdChanged();
}
}
}
private global::System.Int32 _Id;
partial void OnIdChanging(global::System.Int32 value);
partial void OnIdChanged();

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Int32 CustomerId
{
get
{
return _CustomerId;
}
set
{
OnCustomerIdChanging(value);
ReportPropertyChanging("CustomerId");
_CustomerId = StructuralObject.SetValidValue(value);
ReportPropertyChanged("CustomerId");
OnCustomerIdChanged();
}
}
private global::System.Int32 _CustomerId;
partial void OnCustomerIdChanging(global::System.Int32 value);
partial void OnCustomerIdChanged();

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.String Description
{
get
{
return _Description;
}
set
{
OnDescriptionChanging(value);
ReportPropertyChanging("Description");
_Description = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("Description");
OnDescriptionChanged();
}
}
private global::System.String _Description;
partial void OnDescriptionChanging(global::System.String value);
partial void OnDescriptionChanged();

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Decimal Price
{
get
{
return _Price;
}
set
{
OnPriceChanging(value);
ReportPropertyChanging("Price");
_Price = StructuralObject.SetValidValue(value);
ReportPropertyChanged("Price");
OnPriceChanged();
}
}
private global::System.Decimal _Price;
partial void OnPriceChanging(global::System.Decimal value);
partial void OnPriceChanged();

#endregion

#region 导航属性

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[XmlIgnoreAttribute()]
[SoapIgnoreAttribute()]
[DataMemberAttribute()]
[("TempModel", "FK_Purchase_Customers", "Customer")]
public Customer Customer
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<Customer>("TempModel.FK_Purchase_Customers", "Customer").Value;
}
set
{
((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<Customer>("TempModel.FK_Purchase_Customers", "Customer").Value = value;
}
}
/// <summary>
/// 没有元数据文档可用。
/// </summary>
[BrowsableAttribute(false)]
[DataMemberAttribute()]
public EntityReference<Customer> CustomerReference
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<Customer>("TempModel.FK_Purchase_Customers", "Customer");
}
set
{
if ((value != null))
{
((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<Customer>("TempModel.FK_Purchase_Customers", "Customer", value);
}
}
}

#endregion
}

--封装强类型的 ObjectContext 用于操作对应的模型.
public class BaseDataContext : DataContext
{
public BaseDataContext(string fileOrServerOrConnection) : base(fileOrServerOrConnection)
{
}

public BaseDataContext(string fileOrServerOrConnection, MappingSource mapping)
: base(fileOrServerOrConnection, mapping)
{
}

public Table<Customer> Customers
{
get { return GetTable<Customer>(); }
}

public Table<Purchase> Purchases
{
get { return GetTable<Purchase>(); }
}

}

--这里是调用

var dataContext =
new BaseObjectContext(ConfigurationManager.ConnectionStrings["TempEntities"].ConnectionString);

var query = from c in dataContext.Customers
select new
{
c.Name,
Purchases = from p in dataContext.Purchases
where p.CustomerId == c.Id && p.Price > 1000
select new {p.Description, p.Price}
};

Ⅷ ASP.NET中的Linq怎么用

21.1.1 准备数据源
既然LINQ可以查询多种数据源和对象,这些对象可能是数组,可能是数据集,也可能是数据库,那么在使用LINQ进行数据查询时首先需要准备数据源。
1.数组
数组中的数据可以被LINQ查询语句查询,这样就省去了复杂的数组遍历。数组数据源示例代码如下所示。
string[] str = { "学习", "学习LINQ", "好好学习", "生活很美好" };
int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
数组可以看成是一个集合,虽然数组没有集合的一些特性,但是从另一个角度上来说可以看成是一个集合。在传统的开发过程中,如果要筛选其中包含“学习”字段的某个字符串,则需要遍历整个数组。
2.SQL Server
在数据库操作中,同样可以使用LINQ进行数据库查询。LINQ以其优雅的语法和面向对象的思想能够方便的进行数据库操作,为了使用LINQ进行SQL Server数据库查询,可以创建两个表,这两个表的结构如下所示。Student(学生表):
 S_ID:学生ID。
 S_NAME:学生姓名。
 S_CLASS:学生班级。
 C_ID:所在班级的ID。
上述结构描述了一个学生表,可以使用SQL语句创建学生表,示例代码如下所示。
USE [student]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Student](
[S_ID] [int] IDENTITY(1,1) NOT NULL,
[S_NAME] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[S_CLASS] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[C_ID] [int] NULL,
CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED
(
[S_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
为了更加详细的描述一个学生所有的基本信息,就需要创建另一个表对该学生所在的班级进行描述,班级表结构如下所示。Class(班级表):
 C_ID:班级ID。
 C_GREAD:班级所在的年级。
 C_INFOR:班级专业。
上述代码描述了一个班级的基本信息,同样可以使用SQL语句创建班级表,示例代码如下所示。
USE [student]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Class](
[C_ID] [int] IDENTITY(1,1) NOT NULL,
[C_GREAD] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[C_INFOR] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_Class] PRIMARY KEY CLUSTERED
(
[C_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
上述代码在Student数据库中创建了一个班级表,开发人员能够向数据库中添加相应的信息以准备数据源。
3.数据集
LINQ能够通过查询数据集进行数据的访问和整合;通过访问数据集,LINQ能够返回一个集合变量;通过遍历集合变量可以进行其中数据的访问和筛选。在第9章中讲到了数据集的概念,开发人员能够将数据库中的内容填充到数据集中,也可以自行创建数据集。
数据集是一个存在于内存的对象,该对象能够模拟数据库的一些基本功能,可以模拟小型的数据库系统,开发人员能够使用数据集对象在内存中创建表,以及模拟表与表之间的关系。在数据集的数据检索过程中,往往需要大量的if、else等判断才能检索相应的数据。
使用LINQ进行数据集中数据的整理和检索可以减少代码量并优化检索操作。数据集可以是开发人员自己创建的数据集也可以是现有数据库填充的数据集,这里使用上述SQL Server创建的数据库中的数据进行数据集的填充。
21.1.2 使用LINQ
在传统对象查询中,往往需要很多的if、else语句进行数组或对象的遍历,例如在数组中寻找相应的字段,实现起来往往比较复杂,而使用LINQ就简化了对象的查询。由于前面已经准备好了数据源,那么就能够分别使用LINQ语句进行数据源查询。
1.数组
在前面的章节中,已经创建了一个数组作为数据源,数组示例代码如下所示。
int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
上述代码是一个数组数据源,如果开发人员需要从其中的元素中搜索大于5的数字,传统的方法应该遍历整个数组并判断该数字是否大于5,如果大于5则输出,否则不输出,示例代码如下所示。
using System;
using System.Collections.Generic;
using System.Linq; //使用必要的命名空间
using System.Text;
namespace _21_1
{
class Program
{
static void Main(string[] args)
{
string[] str = { "学习", "学习LINQ", "好好学习", "生活很美好" }; //定义数组
int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int i = 0; i < inter.Length; i++) //遍历数组
{
if (inter[i] > 5) //判断数组元素的值是否大于5
{
Console.WriteLine(inter[i].ToString()); //输出对象
}
}
Console.ReadKey();
}
}
}
上述代码非常简单,将数组从头开始遍历,遍历中将数组中的的值与5相比较,如果大于5就会输出该值,如果小于5就不会输出该值。虽然上述代码实现了功能的要求,但是这样编写的代码繁冗复杂,也不具有扩展性。如果使用LINQ查询语句进行查询就非常简单,示例代码如下所示。
class Program
{
static void Main(string[] args)
{
string[] str = { "学习", "学习LINQ", "好好学习", "生活很美好" }; //定义数组
int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //定义数组
var st = from s in inter where s > 5 select s; //执行LINQ查询语句
foreach (var t in st) //遍历集合元素
{
Console.WriteLine(t.ToString()); //输出数组
}
Console.ReadKey();
}
}
使用LINQ进行查询之后会返回一个IEnumerable的集合。在上一章讲过,IEnumerable是.NET框架中最基本的集合访问器,可以使用foreach语句遍历集合元素。使用LINQ查询数组更加容易被阅读,LINQ查询语句的结构和SQL语法十分类似,LINQ不仅能够查询数组,还可以通过.NET提供的编程语言进行筛选。例如str数组变量,如果要查询其中包含“学习”的字符串,对于传统的编程方法是非常冗余和繁琐的。由于LINQ是.NET编程语言中的一部分,开发人员就能通过编程语言进行筛选,LINQ查询语句示例代码如下所示。
var st = from s in str where s.Contains("学习") select s;
2.使用SQL Server
在传统的数据库开发中,如果需要筛选某个数据库中的数据,可以通过SQL语句进行筛选。在ADO.NET中,首先需要从数据库中查询数据,查询后就必须将数据填充到数据集中,然后在数据集中进行数据遍历,示例代码如下所示。
try
{
SqlConnection
con = new SqlConnection("server='(local)';database='student';uid='sa';pwd='sa'"); //创建连接
con.Open(); //打开连接
string strsql = "select * from student,class where student.c_id=class.c_id"; //SQL语句
SqlDataAdapter da = new SqlDataAdapter(strsql, con); //创建适配器
DataSet ds = new DataSet(); //创建数据集
int j = da.Fill(ds, "mytable"); //填充数据集
for (int i = 0; i < j; i++) //遍历集合
{
Console.WriteLine(ds.Tables["mytable"].Rows[i]["S_NAME"].ToString()); //输出对象
}
}
catch
{
Console.WriteLine("数据库连接错误"); //抛出异常
}
上述代码进行数据库的访问和查询。在上述代码中,首先需要创建一个连接对象进行数据库连接,然后再打开连接,打开连接之后就要编写SELECT语句进行数据库查询并填充到DataSet数据集中,并在DataSet数据集中遍历相应的表和列进行数据筛选。如果要查询C_ID为1的学生的所有姓名,有三个办法,这三个办法分别是:
 修改SQL语句。
 在循环内进行判断。
 使用LINQ进行查询。
修改SQL语句是最方便的方法,直接在SELECT语句中添加查询条件WHERE C-ID=1就能够实现,但是这个方法扩展性非常的低,如果有其他需求则就需要修改SQL语句,也有可能造成其余代码填充数据集后数据集内容不同步。
在循环内进行判断也是一种方法,但是这个方法当循环增加时会造成额外的性能消耗,并且当需要扩展时,还需要修改循环代码。最方便的就是使用LINQ进行查询,在Visual Studio 2008中提供了LINQ to SQL类文件用于将现有的数据抽象成对象,这样就符合了面向对象的原则,同时也能够减少代码,提升扩展性。创建一个LINQ to SQL类文件,直接将服务资源管理器中的相应表拖放到LINQ to SQL类文件可视化窗口中即可,如图21-1所示。

图21-1 创建LINQ to SQL文件
创建了LINQ to SQL类文件后,就可以直接使用LINQ to SQL类文件提供的类进行查询,示例代码如下所示。
linqtosqlDataContext lq = new linqtosqlDataContext();
var mylq = from l in lq.Student from cl in lq.Class where l.C_ID==cl.C_ID select l; //执行查询
foreach (var result in mylq) //遍历集合
{
Console.WriteLine(result.S_NAME.ToString()); //输出对象
}
上述代码只用了很短的代码就能够实现数据库中数据的查询和遍历,并且从可读性上来说也很容易理解,因为LINQ查询语句的语法基本与SQL语法相同,只要有一定的SQL语句基础就能够非常容易的编写LINQ查询语句。
3.数据集
LINQ同样对数据集支持查询和筛选操作。其实数据集也是集合的表现形式,数据集除了能够填充数据库中的内容以外,开发人员还能够通过对数据集的操作向数据集中添加数据和修改数据。前面的章节中已经讲到,数据集可以看作是内存中的数据库。数据集能够模拟基本的数据库,包括表、关系等。这里就将SQL Server中的数据填充到数据集即可,示例代码如下所示。
try
{
SqlConnection
con = new SqlConnection("server='(local)';database='student';uid='sa';pwd='sa'"); //创建连接
con.Open(); //打开连接
string strsql = "select * from student,class where student.c_id=class.c_id"; //执行SQL
SqlDataAdapter da = new SqlDataAdapter(strsql, con); //创建适配器
DataSet ds = new DataSet(); //创建数据集
da.Fill(ds, "mytable"); //填充数据集
DataTable tables = ds.Tables["mytable"]; //创建表
var dslq = from d in tables.AsEnumerable() select d; //执行LINQ语句
foreach (var res in dslq)
{
Console.WriteLine(res.Field<string>("S_NAME").ToString()); //输出对象
}
}
catch
{
Console.WriteLine("数据库连接错误");
}
上述代码使用LINQ针对数据集中的数据进行筛选和整理,同样能够以一种面向对象的思想进行数据集中数据的筛选。在使用LINQ进行数据集操作时,LINQ不能直接从数据集对象中查询,因为数据集对象不支持LINQ查询,所以需要使用AsEnumerable方法返回一个泛型的对象以支持LINQ的查询操作,示例代码如下所示。
var dslq = from d in tables.AsEnumerable() select d; //使用AsEnumerable
上述代码使用AsEnumerable方法就可以让数据集中的表对象能够支持LINQ查询。
21.1.3 执行LINQ查询
从上一节可以看出LINQ在编程过程中极大的方便了开发人员对于业务逻辑的处理代码的编写,在传统的编程方法中复杂、冗余、难以实现的方法在LINQ中都能很好的解决。LINQ不仅能够像SQL语句一样编写查询表达式,LINQ最大的优点也包括LINQ作为编程语言的一部分,可以使用编程语言提供的特性进行LINQ条件语句的编写,这就弥补了SQL语句中的一些不足。在前面的章节中将一些复杂的查询和判断的代码简化成LINQ应用后,就能够执行应用程序判断LINQ是否查询和筛选出了所需要的值。
1.数组
在数组数据源中,开发人员希望能够筛选出大于5的元素。开发人员将传统的代码修改成LINQ代码并通过LINQ查询语句进行筛选,示例代码如下所示。
var st = from s in inter where s > 5 select s; //执行LINQ查询
上述代码将查询在inter数组中的所有元素并返回其中元素的值大于5的元素的集合,运行后如图21-2所示。

图21-2 遍历数组
LINQ执行了条件语句并返回了元素的值大于5的元素。LINQ语句能够方便的扩展,当有不同的需求时,可以修改条件语句进行逻辑判断,例如可以筛选一个平方数为偶数的数组元素,直接修改条件即可,LINQ查询语句如下所示。
var st = from s in inter where (s*s)%2==0 select s; //执行LINQ查询
上述代码通过条件(s*s)%2==0将数组元素进行筛选,选择平方数为偶数的数组元素的集合,运行后如图21-3所示。

图21-3 更改筛选条件
2.使用SQL Server
在LINQ to SQL类文件中,LINQ to SQL类文件已经将数据库的模型封装成一个对象,开发人员能够通过面向对象的思想访问和整合数据库。LINQ to SQL也对SQL做了补充,使用LINQ to SQL类文件能够执行更强大的筛选,LINQ查询语句代码如下所示。
var mylq = from l in lq.Student from cl in lq.Class where l.C_ID==cl.C_ID select l; //执行LINQ查询
上述代码从Student表和Class表中筛选了C_ID相等的学生信息,这很容易在SQL语句中实现。LINQ作为编程语言的一部分,可以使用更多的编程方法实现不同的筛选需求,例如筛选名称中包含“郭”字的学生的名称在传统的SQL语句中就很难通过一条语句实现,而在LINQ中就能够实现,示例代码如下所示。
var mylq = from l in lq.Student from cl in lq.Class where l.C_ID==cl.C_ID where
l.S_NAME.Contains("郭") select l; //执行LINQ条件查询
上述代码使用了Contains方法判断一个字符串中是否包含某个字符或字符串,这样不仅方便阅读,也简化了查询操作,运行后如图21-4和图21-5所示。

图21-4 简单查询 图21-5 条件查询
LINQ返回了符合条件的元素的集合,并实现了筛选操作。LINQ不仅作为编程语言的一部分,简化了开发人员的开发操作,从另一方面讲,LINQ也补充了在SQL中难以通过几条语句实现的功能的实现。从上面的LINQ查询代码可以看出,就算是不同的对象、不同的数据源,其LINQ基本的查询语法都非常相似,并且LINQ还能够支持编程语言具有的特性从而弥补SQL语句的不足。在数据集的查询中,其查询语句也可以直接使用而无需大面积修改代码,这样代码就具有了更高的维护性和可读性。

Ⅸ .NET自从出了LINQ之后,就从来没用过!

随时随地处理数据,但不仅对于数据库,对于一般的List、Dictionary,反正是IEnumerable的数据类型都可以

比如原来要排个序要循环至少一圈,现在只要 list.OrderBy(c=>c.Id)
也可以筛选列表,或做交差并补

反正很多功能都很方便了,楼主只是说的LinqToSQL,但是Linq不仅仅是这样,如果可以熟悉并应用,会大大加快开发速度,提升我想不止20%吧

Ⅹ linq to sql类怎么用

打开VS2010新建控制台应用程序,然后添加LINQ
to
SQL
Class,命名为DbApp.dbml,新建dbml文件之后,可以打开server
explorer,建立数据库连接,并将我们新建的表拖到dbml文件中,
2.
可以通过点击dbml文件空白处,按F4显示dbml属性,可以修改Context和生成实体的命名空间
3.
到现在为止VS2010通过工具为我们创建好了数据表对应实体类和数据表操作添,改,删的方法,现在开始实践

热点内容
androidsdk包含 发布:2024-05-04 00:45:54 浏览:206
android拷贝文件 发布:2024-05-04 00:38:28 浏览:775
存储冗余比 发布:2024-05-04 00:12:58 浏览:403
oracle数据库存储原理 发布:2024-05-04 00:10:40 浏览:522
未拆封玩客云3怎么搭建服务器 发布:2024-05-04 00:06:11 浏览:797
彻底删除编译安装的文件 发布:2024-05-04 00:05:33 浏览:55
编程机构数量 发布:2024-05-03 23:49:25 浏览:955
python源码编译安装 发布:2024-05-03 23:48:16 浏览:108
android手机市场 发布:2024-05-03 23:47:04 浏览:499
如何配置vlan并添加端口 发布:2024-05-03 23:37:53 浏览:726