當前位置:首頁 » 編程語言 » 創建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通過工具為我們創建好了數據表對應實體類和數據表操作添,改,刪的方法,現在開始實踐

熱點內容
什麼手機安卓系統80 發布:2024-04-20 21:37:29 瀏覽:379
浙江萬里的伺服器地址 發布:2024-04-20 21:16:59 瀏覽:407
ndklinux下載 發布:2024-04-20 21:05:22 瀏覽:566
王者榮耀解壓資源包97 發布:2024-04-20 20:46:10 瀏覽:397
蘋果手機沒有密碼怎麼打開 發布:2024-04-20 20:45:25 瀏覽:93
如何用濃硝酸配置百分之2的硝酸 發布:2024-04-20 20:44:39 瀏覽:797
微信商城java源碼下載 發布:2024-04-20 20:27:35 瀏覽:121
用友軟體sql 發布:2024-04-20 20:10:01 瀏覽:933
python倒著循環 發布:2024-04-20 20:09:52 瀏覽:759
雲伺服器遠程電腦版 發布:2024-04-20 20:09:12 瀏覽:259