當前位置:首頁 » 編程語言 » linqtosql類

linqtosql類

發布時間: 2022-07-20 23:54:38

① Linq和Linqtosql有什麼區別一般做項目用哪種

Linq是微軟在.net3.0推出的一種新的數據訪問和處理的方式,來解決過去處理集合對象數據所遇到的種種困難。其中在C#3.0和VB9中分別引入了和SQL相似的Linq語法,使得現在操作各種數據對象變得非常容易而且可讀性更好。

Linq To Sql是微軟默認提供的LinqProvider的一種,其他的還有LinqToDataSet LinqToXml LinqToEntity等。

平時開發項目可以大量的使用linq,他會讓你在處理大量集合數據的時候提高效率。而Linq2Sql算是一個ORM框架,可以用來減輕數據訪問的負擔,如果你知道Hibernate之類的ORM框架的話,就很容易理解他了

② LINQtoSQL和序列化問題,怎麼解決

當一個對象的實例變數引用其他對象,序列化該對象時也把引用對象進行序列化,而序列化的是對象的狀態不是類的狀態,所以類不會被序列化,像類級別的靜態成員也不能被序列化,具體看這篇文章。

③ LINQ技術linqtosqlClassDataContext類在哪個命名空間下 - C#編程 -

using
system.data.linq;?
?這就是LINQ
to
SQL的命名空間using
system.linq;??這是LINQ
to
Objects的命名空間另有System.Data.Objects,是
ADO
Entity
Framework的命名空間

④ C#裡面linqtosqlClassDataContext類要引用哪個命名空間或者還要哪個組件

using System;
using System.Linq;
using System.Data;
using System.Data.Linq;

下面博客里有說明
http://tuibianlv001.blog.163.com/blog/static/16756387720106224915926/

⑤ linq to sql類怎麼用

打開VS2010新建控制台應用程序,然後添加LINQ
to
SQL
Class,命名為DbApp.dbml,新建dbml文件之後,可以打開server
explorer,建立資料庫連接,並將我們新建的表拖到dbml文件中,
2.
可以通過點擊dbml文件空白處,按F4顯示dbml屬性,可以修改Context和生成實體的命名空間
3.
到現在為止VS2010通過工具為我們創建好了數據表對應實體類和數據表操作添,改,刪的方法,現在開始實踐

⑥ 當資料庫表結構發生變化時,linqtosql怎麼跟著更新

當資料庫表結構發生變化時,linqtosql怎麼跟著更新
寫三層結構啊:Application、Html(表示層客戶端應用程序)------類模塊、Dll(邏輯層)------Aplication、Html(表示層伺服器設置)-------DataBase(資料庫) 在邏輯表示層中可以把資料庫設置存儲在本地數據里,本地數據把資料庫對象作為字元串存儲

⑦ 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)
{
}

⑧ vs2019怎麼添加linqtosql

在VS2019編輯頁面【工具】中選擇【獲取工具和功能】,在彈出的安裝頁面點擊【單個組件】,然後在單個組件中添加【LINQ to SQL工具】,安裝完就會有了

⑨ linqtosql生成的表加不加s

在自動生成的DataContext中有Students屬性,它的類型是Table<Student>對應資料庫中的Student表,我們的查詢對象就是它了。
先來一個最簡單的Query

1
2

var query = from s in db.Students
select s;

上面的語句可以查詢Student表的所有記錄,但是它卻不同於 SQL語句

1
2
3
4
5
6
7
8
9
10

SELECT [StudentID]
,[Name]
,[Hometown]
,[Gender]
,[Birthday]
,[ClassID]
,[WeightInKg]
,[HeightInCm]
,[Desc]
FROM [Test].[dbo].[Student]

query的數據類型是IQueryable<Student> ,其字面意思是Student的可查詢實例,通過這個query我們可以做很多種查詢,當然包括上面的SQL語句。具體這個IQueryable實例會做那種查詢和我們後續代碼中如何使用它有關系,下面是幾個例子:
1. 使用query返回Student表中的記錄數,代碼如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14

using (var writer = new StreamWriter(@"E:\projects.2010\Test\LINQ2SQL_2\linq.sql", false, Encoding.UTF8))
{
//最簡單的select
using (DbAppDataContext db = new DbAppDataContext())
{
//設置Log列印到的地方
db.Log = writer;
var query = from s in db.Students
select s;

//返回Student表中的記錄數
var cn = query.Count();
}
}

上面query.Count()執行的SQL如下:

1
2
3

SELECT COUNT(*) AS [value]
FROM [dbo].[Student] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.

生成的sql語句很規范,取得Student表中的記錄數
2.給這個IQuerable添加條件身高大於130cm,然後執行查詢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

using (var writer = new StreamWriter(@"E:\projects.2010\Test\LINQ2SQL_2\linq.sql", false, Encoding.UTF8))
{
//最簡單的select
using (DbAppDataContext db = new DbAppDataContext())
{
//設置Log屬性,將生成的sql語句保存到文件中
db.Log = writer;
var query = from s in db.Students
select s;

//列印身高大於132cm的Student
foreach (var item in query.Where(s => s.HeightInCm > 132))
{
Console.WriteLine("{0}的身高是{1}cm", item.Name, item.HeightInCm);
}
}
}

其SQL語句如下:可以看到linq to sql對sql注入攻擊有天然的免疫作用,它自動生成的sql語句是參數化的

1
2
3
4
5

SELECT [t0].[StudentID], [t0].[Name], [t0].[Hometown], [t0].[Gender], [t0].[Birthday], [t0].[ClassID], [t0].[WeightInKg], [t0].[HeightInCm], [t0].[Desc] AS [Desc]
FROM [dbo].[Student] AS [t0]
WHERE [t0].[HeightInCm] > @p0
-- @p0: Input Float (Size = -1; Prec = 0; Scale = 0) [132]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

我們可以對IQueryable附加條件限制,其實添加這個Where後的query和下面的語句是等價的。

1
2
3

var query = from s in db.Students
where s.HeightInCm > 132
select s;

那麼如果我們的query實例中已經有條件後再加限制會是什麼樣子的呢,請看3
3. 在query定義是有身高、體重兩個查詢條件,在使用query時我們又附加了一個Hometown在「多家營」的條件,看下代碼和真實執行的sql情況

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

using (var writer = new StreamWriter(@"E:\projects.2010\Test\LINQ2SQL_2\linq.sql", false, Encoding.UTF8))
{
//最簡單的select
using (DbAppDataContext db = new DbAppDataContext())
{
//設置Log屬性,將生成的sql語句保存到文件中
db.Log = writer;

//查詢身高大於132並且體重大於30的Student
var query = from s in db.Students
where s.HeightInCm > 132 && s.WeightInKg > 30
select s;

//在query中用Where附加家鄉在多家營的記錄
foreach (var item in query.Where(s => s.Hometown == "多家營"))
{
Console.WriteLine("{0}的身高是{1}cm", item.Name, item.HeightInCm);
}
}
}

SQL:

1
2
3
4
5
6
7

SELECT [t0].[StudentID], [t0].[Name], [t0].[Hometown], [t0].[Gender], [t0].[Birthday], [t0].[ClassID], [t0].[WeightInKg], [t0].[HeightInCm], [t0].[Desc] AS [Desc]
FROM [dbo].[Student] AS [t0]
WHERE <span style="background-color: #ffff00;">([t0].[Hometown] = @p0)</span> AND ([t0].[HeightInCm] > @p1) AND ([t0].[WeightInKg] > @p2)
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [多家營]
-- @p1: Input Float (Size = -1; Prec = 0; Scale = 0) [132]
-- @p2: Input Float (Size = -1; Prec = 0; Scale = 0) [30]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

可以看出後附件的條件並非如我們常規理解附件到條件的最後,而是放到了最前面,這一點有可能對效率造成影響,是需要我們注意的。
通過上面三點可以看出來linq to sql中的IQueryable並非等同於某一個sql語句,其具體要執行的sql語句和具體情況有關系。
在query定義時可以很方便的添加排序規則,可以是一個或者n個,如下語句:

1
2
3
4
5

//查詢身高大於132並且體重大於30的Student,並按照StudentID升序排序,按照classID降序排序
var query = from s in db.Students
where s.HeightInCm > 132 && s.WeightInKg > 30
orderby s.StudentID ascending, s.ClassID descending
select s;

熱點內容
如何加入安卓代理 發布:2025-02-01 01:51:40 瀏覽:2
我的世界手游伺服器刷鑽石教程 發布:2025-02-01 01:48:13 瀏覽:773
sqlifthen男女 發布:2025-02-01 01:44:59 瀏覽:690
幻靈和安卓哪個互通 發布:2025-02-01 01:43:33 瀏覽:648
電腦配置夠但為什麼打lol掉幀 發布:2025-02-01 01:37:08 瀏覽:316
21款朗逸哪個配置比較劃算 發布:2025-02-01 01:35:32 瀏覽:976
建築動畫片腳本 發布:2025-02-01 01:35:21 瀏覽:469
管家婆如何用阿里雲伺服器 發布:2025-02-01 01:29:09 瀏覽:649
解壓耳放 發布:2025-02-01 01:20:18 瀏覽:176
cars演算法 發布:2025-02-01 01:02:26 瀏覽:177