linqsql函数
① linq有没有类似sql的ascii函数吗
SQL的ASCII函数,就是把第一个字符转换为ascii码,
C#中直接用(int)'a' 就可以了,不需要linq
② sql 中的charindex函数 用linq to sql 怎么实现
var query=from x in dt.AsEnumerable()
where x.Field<string>("fieldname").IndexOf("char")>0
③ sql 函数 exec在c#linq怎么写
linq2sql?
你在linq2sql的操作界面把函数或者过程拖到里面就可以了。
使用的话,你实例linq2sql,直接点出来用就行。跟平时调用函数一样。
④ LINQ TO SQL 有什么优缺点啊
首先,在了解 LINQ To SQL 有什么优点之前,我们有必要首先了解下,微软为什么弄了这么个东西。 搞出这个东西来有什么目的:——当然是为了 满足不知道怎么操作数据的程序员开发设计的,并不是每个程序员 都会直接操作数据库,LinQ 可以让他们以一种面向数据对象的方式来思考,及持久化他们的数据!
好处: 容易学习,书写简单。 在开发 中小型 项目 的时候推荐使用!因为可以节省时间!
它可以很方便的调用 存储过程、SQL函数
缺点:由于直接封装了所有的数据持久操作。导致批量持久数据会产生效率问题
尤其体现在批量跟新数据,它会在内存中保持大量的数据模型。
总结:中小型 项目 就放心用吧! 不过从技术 储备的角度来说,建议 看看entity framework
⑤ 如何在LINQ TO SQL中一次使用多个聚合函数
1)COUNT
语法:COUNT(e1)
参数:e1为一个表达式,可以是任意的数据类型
返回:返回数值型数据
作用:返回e1指定列不为空的记录总数
2)SUM,
语法:SUM(e1)
参数:e1为类型为数值型的表达式
返回:返回数值型数据
作用:对e1指定的列进行求和计算
3)MIN, MAX
语法:MIN(e1)、MAX(e1)
参数:e1为一个字符型、日期型或数值类型的表达式。
若e1为字符型,则根据ASCII码来判断最大值与最小值。
返回:根据e1参数的类型,返回对应类型的数据。
作用:MIN(e1)返回e1表达式指定的列中最小值;
MAX(e1)返回e1表达式指定的列中最大值;
4)AVG
语法:AVG(e1)
参数:e1为一个数值类型的表达式
返回:返回一个数值类型数据
作用:对e1表达式指定的列,求平均值。
5)MEDIAN
语法:MEDIAN(e1)
参数:e1为一个数值或日期类型的表达式
返回:返回一个数值或日期类型的数据
作用:首先,根据e1表达式指定的列,对值进行排序;
若排序后,总记录为奇数,则返回排序队列中,位于中间的值;
若排序后,总记录为偶数,则对位于排序队列中,中间两个值进行求平均,返回这个平均值;
6)RANK
1)用法1:RANK OVER
语法: RANK( ) OVER ([ PARTITION BY column1 ] ORDER BY column2 [ASC|DESC])
为分析函数,为每条记录产生一个序列号,并返回。
参数: column1为列名,指定按照哪一列进行分类(分组)
column2为列名,指定根据哪列排序,默认为升序;
若指定了分类子句(PARTITION BY),则对每类进行排序(每个分类单独排序)
返回:返回一个数值类型数据,作为该记录的序号!
作用:为分析函数,对记录先按column1分类,再对每个分类进行排序,并为每条记录分配一个序号(每个分类单独排序)
注意:排序字段值相同的记录,分配相同的序号。存在序号不连续的情况
实例:student表记录了学生每科的成绩,要求按学科排序,并获取每科分数前两名的记录
student表如下:
SQL> select * from student order by kemu;
NAME ID KEMU FENSHU
---------- -------------- -------------- ----------------
Li 0113101 物理 80
Luo 0113011 物理 80
Wang 0113077 物理 70
Zhang 0113098 物理 90
Luo 0113011 高数 80
Wang 0113077 高数 70
Zhang 0113098 高数 80
Li 0113101 高数 90
8 rows selected
按学科分类,按成绩排序(降序)
SQL> select rank() over(partition by KEMU order by FENSHU desc) as sort,student.* from student;
SORT NAME ID KEMU FENSHU
---------- ---------- ---------------- ------------ ----------
1 Zhang 0113098 物理 90
2 Li 0113101 物理 80
2 Luo 0113011 物理 80
4 Wang 0113077 物理 70
1 Li 0113101 高数 90
2 Luo 0113011 高数 80
2 Zhang 0113098 高数 80
4 Wang 0113077 高数 70
由返回记录可了解,对排序列的值相同的记录,rank为其分配了相同的序号(SORT NAME列)。
并且之后的记录的序号是不连续的。
若获取每科前两名,只需对排序后的结果增加二次查询即可
select * from
(select rank() over(partition by KEMU order by FENSHU desc) as sort_id,student.* from student) st
where st.sort_id<=2;
2)用法2:RANK WITHIN GROUP
语法: RANK( expr1 ) WITHIN GROUP ( ORDER BY expr2 )
为聚合函数,返回一个值。
参数:expr1为1个或多个常量表达式;
expr2为如下格式的表达式:
expr2的格式为'expr3 [ DESC | ASC ] [ NULLS { FIRST | LAST } ]'
其中,expr1需要与expr2相匹配,
即:expr1的常量表达式的类型、数量必须与ORDER BY子句后的expr2表达式的类型、数量相同
实际是expr1需要与expr3相匹配
如:RANK(a) WITHIN GROUP (ORDER BY b ASC NULLS FIRST);
其中,a为常量,b需要是与相同类型的表达式
RANK(a,b) WITHIN GROUP (ORDER BY c DESC NULLS LAST, d DESC NULLS LAST);
其中,a与b都为常量;c是与a类型相同的表达式、d是与b类型相同的表达式;
返回:返回数值型数据,该值为假定记录在表中的序号。
作用:确定一条假定的记录,在表中排序后的序号。
如:假定一条记录(假设为r1)的expr2指定字段值为常量expr1,则将r1插入表中后,
与原表中的记录,按照ORDER BY expr2排序后,该记录r1在表中的序号为多少,返回该序号。
注释: NULLS FIRST指定,将ORDER BY指定的排序字段为空值的记录放在前边;
NULLS LAST指定,将ORDER BY指定的排序字段为空值的记录放在后边;
⑥ linq to sql 如何返回两个日期的天数差值
可以这样 实现://请先: using System.Data.Linq.SqlClient; var query = (from pact in db.Pact
where SqlMethods
.DateDiffDay(pact.PactStateTime, pact.PactEndTime) > 3
select pact).ToList();
⑦ 请问一下SQL中的CASE When 在Linq中应该如何去使用
三四项简单的处理可以用三目表达式直接写;
四项以上或者有复杂的处理最好就使用外接函数或者自定义数据库函数或者数据库存储过程了。
⑧ 如何于LINQ to Entities中使用SQL Server的用户自定义函数
WP7 是不支持SQLSERVER地.........
芒果开始支持SQL Server CE,使用语法什么的跟winform和webform一样。
⑨ Linq To Sql 如何实现递归查询 树形结构
--构造测试数据: 只作演示用
CREATE TABLE [dbo].[Tim_LinqTable](
[Id] int PRIMARY KEY IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Parent] int NOT NULL,
)
GO
INSERT INTO [Tim_LinqTable]
SELECT 'A',0 UNION ALL
SELECT 'A1',1 UNION ALL
SELECT 'A2',1 UNION ALL
SELECT 'B1',2 UNION ALL
SELECT 'B2',3 UNION ALL
SELECT 'C1',4 UNION ALL
SELECT 'C2',4 UNION ALL
SELECT 'D1',5 UNION ALL
SELECT 'D2',5 UNION ALL
SELECT 'D3',5
GO
WITH temp
AS
(
SELECT * FROM [Tim_LinqTable] WHERE Parent = 3
UNION ALL
SELECT m.* FROM [Tim_LinqTable] AS m
INNER JOIN temp AS child ON m.Parent = child.Id
)
SELECT * FROM temp
GO
--查询 Parent=3 的所有子数据结果如下:
Id Name Parent
----------- -------------------------------------------------- -----------
5 B2 3
8 D1 5
9 D2 5
10 D3 5
(4 row(s) affected)
//好,下边来看看用C#怎么实现上边的SQL语句吧:
void Main()
{
var query=GetClassID(3);
Console.WriteLine("Id\tName\tParent");
query.ToList().ForEach(q=>Console.WriteLine("{0}\t{1}\t{2}",q.Id,q.Name,q.Parent));
/*
Id Name Parent
5 B2 3
8 D1 5
9 D2 5
10 D3 5
*/
}
public IEnumerable<Tim_LinqTable> GetClassID(int p_id)
{
var query = from c in this.Tim_LinqTables
where c.Parent == p_id
select c;
return query.ToList().Concat(query.ToList().SelectMany(t => GetClassID(t.Id)));
}