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

linqtosqland

發布時間: 2023-02-07 10:45:55

Ⅰ LINQ怎麼寫多表分組統計

這么復雜最好還是不要改成linq了 因為用linq寫起來更復雜 你直接做成視圖或者存儲過程 更方便 一樣能用linqTosql調用

Ⅱ Linq to sql 動態添加條件多表查詢數據

sql = "select * from t where 1=1";

//姓名不為空就把姓名加入where條件
if (!string.IsNullOrEmpty(this.txtName.Text.Trim()))
{
sql = sql + string.Format(" and name like '%{0}%'", this.txtName.Text.Trim());
}

//身份證號不為空就把身份證號加入where條件
if (!string.IsNullOrEmpty(this.txtID.Text.Trim()))
{
sql = sql + string.Format(" and id like '%{0}%'", this.txtID.Text.Trim());
}

Ⅲ c# 中sql查詢好像有一個類可以參數化select查詢條件的

根據你說的描述,應該是Entity Framework(實體框架)、 Linq To SQL 或者Lamda表達式,關鍵是Linq。下面我給你點示例代碼你看是不是。

publicvoidLinqToSqlGroupBy04(){
varq=
frompindb.Procts
grouppbyp.CategoryIDintog
selectnew{
g.Key,
AveragePrice=g.Average(p=>p.UnitPrice)
};

ObjectDumper.Write(q,1);
}
publicvoidLinqToSqlWhere05(){
varq=
db.Procts.Where(p=>p.UnitPrice>10m).Where(p=>p.Discontinued);

ObjectDumper.Write(q,0);
}

Ⅳ C# 如何快速將窗體中所有控制項的信息存入資料庫

使用orm框架.
比如nhibernate,ibatise,LinqToSql等等

Ⅳ 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;

熱點內容
國產系列ftp 發布:2024-11-01 15:49:53 瀏覽:701
招編程師傅招聘 發布:2024-11-01 15:34:51 瀏覽:192
kkt編程 發布:2024-11-01 15:31:26 瀏覽:614
我的世界管理員進伺服器提示 發布:2024-11-01 15:21:12 瀏覽:126
如何刪除qq空間訪問記錄 發布:2024-11-01 15:20:07 瀏覽:322
微信上傳圖片失敗 發布:2024-11-01 15:19:53 瀏覽:116
python網站域名伺服器搭建 發布:2024-11-01 15:18:36 瀏覽:693
量產工具加密 發布:2024-11-01 15:14:31 瀏覽:673
儲備存儲 發布:2024-11-01 15:14:28 瀏覽:329
win7工作組訪問密碼 發布:2024-11-01 14:43:26 瀏覽:271