当前位置:首页 » 编程语言 » 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;

热点内容
中国大学mooc密码要求是什么 发布:2024-11-01 18:33:45 浏览:816
jrtplib编译 发布:2024-11-01 18:06:01 浏览:226
java代码中if 发布:2024-11-01 18:02:40 浏览:377
android定时刷新 发布:2024-11-01 17:59:43 浏览:999
炎黄解说我的世界服务器生存 发布:2024-11-01 17:59:42 浏览:542
如何清楚网页缓存 发布:2024-11-01 17:53:58 浏览:552
linux文件权限不够 发布:2024-11-01 17:53:19 浏览:917
c语言中10是什么意思 发布:2024-11-01 17:45:08 浏览:892
装棉衣压缩袋 发布:2024-11-01 17:37:18 浏览:297
android40ble蓝牙 发布:2024-11-01 17:36:58 浏览:712