linq to sql 如何返回两个日期的天数差值

linq to sql 如何返回两个日期的天数差值,第1张

SqlFunctions.DateDiff 方法 (String, Nullable(Of DateTime), Nullable(Of DateTime))

.NET Framework 4

返回所指定开始日期和结束日期之间的指定 datepart 边界的计数。

命名空间: System.Data.Objects.SqlClient

程序集: System.Data.Entity(在 System.Data.Entity.dll 中)

语法

--------------------------------------------------------------------------------

C#

C++

F#

VB

复制

[EdmFunctionAttribute("SqlServer", "DATEDIFF")]

public static Nullable<int>DateDiff(

string datePartArg,

Nullable<DateTime>startDate,

Nullable<DateTime>endDate

)

参数

datePartArg类型:System.String

要计算时间间隔差值的日期部分。

startDate类型:System.Nullable(Of DateTime)

第一个日期。

endDate类型:System.Nullable(Of DateTime)

第二个日期。

返回值

类型:System.Nullable(Of Int32)

两个日期之间的时间间隔数。

备注

--------------------------------------------------------------------------------

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。有关相应 SQL Server 函数的信息,请参见 DATEDIFF (Transact-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 IDKEMU FENSHU

---------- -------------- -------------- ----------------

Li0113101 物理 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

SORTNAMEID KEMU FENSHU

---------- ---------- ---------------- ------------ ----------

1Zhang 0113098物理 90

2Li 0113101物理 80

2Luo 0113011物理 80

4Wang 0113077物理 70

1Li 0113101高数 90

2Luo 0113011高数 80

2Zhang 0113098高数 80

4Wang 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指定的排序字段为空值的记录放在后边;

使用join来连接

Enumerable.Join<TOuter, TInner, TKey, TResult>方法 (IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>)

发送反馈

基于匹配键对两个序列的元素进行关联。

使用默认的相等比较器对键进行比较。

命名空间: System.Linq

程序集: System.Core(在 System.Core.dll 中)

语法

--------------------------------------------------------------------------------

VBC#C++F#JScript以带有颜色区分的格式查看复制到剪贴板打印<ExtensionAttribute>_

Public Shared Function Join(Of TOuter, TInner, TKey, TResult) ( _

outer As IEnumerable(Of TOuter), _

inner As IEnumerable(Of TInner), _

outerKeySelector As Func(Of TOuter, TKey), _

innerKeySelector As Func(Of TInner, TKey), _

resultSelector As Func(Of TOuter, TInner, TResult) _

) As IEnumerable(Of TResult)

<ExtensionAttribute>_

Public Shared Function Join(Of TOuter, TInner, TKey, TResult) ( _

outer As IEnumerable(Of TOuter), _

inner As IEnumerable(Of TInner), _

outerKeySelector As Func(Of TOuter, TKey), _

innerKeySelector As Func(Of TInner, TKey), _

resultSelector As Func(Of TOuter, TInner, TResult) _

) As IEnumerable(Of TResult)

public static IEnumerable<TResult>Join<TOuter, TInner, TKey, TResult>(

this IEnumerable<TOuter>outer,

IEnumerable<TInner>inner,

Func<TOuter, TKey>outerKeySelector,

Func<TInner, TKey>innerKeySelector,

Func<TOuter, TInner, TResult>resultSelector

)

public static IEnumerable<TResult>Join<TOuter, TInner, TKey, TResult>(

this IEnumerable<TOuter>outer,

IEnumerable<TInner>inner,

Func<TOuter, TKey>outerKeySelector,

Func<TInner, TKey>innerKeySelector,

Func<TOuter, TInner, TResult>resultSelector

)

[ExtensionAttribute]

public:

generic<typename TOuter, typename TInner, typename TKey, typename TResult>

static IEnumerable<TResult>^ Join(

IEnumerable<TOuter>^ outer,

IEnumerable<TInner>^ inner,

Func<TOuter, TKey>^ outerKeySelector,

Func<TInner, TKey>^ innerKeySelector,

Func<TOuter, TInner, TResult>^ resultSelector

)

[ExtensionAttribute]

public:

generic<typename TOuter, typename TInner, typename TKey, typename TResult>

static IEnumerable<TResult>^ Join(

IEnumerable<TOuter>^ outer,

IEnumerable<TInner>^ inner,

Func<TOuter, TKey>^ outerKeySelector,

Func<TInner, TKey>^ innerKeySelector,

Func<TOuter, TInner, TResult>^ resultSelector

)

static member Join :

outer:IEnumerable<'TOuter>*

inner:IEnumerable<'TInner>*

outerKeySelector:Func<'TOuter, 'TKey>*

innerKeySelector:Func<'TInner, 'TKey>*

resultSelector:Func<'TOuter, 'TInner, 'TResult>->IEnumerable<'TResult>

static member Join :

outer:IEnumerable<'TOuter>*

inner:IEnumerable<'TInner>*

outerKeySelector:Func<'TOuter, 'TKey>*

innerKeySelector:Func<'TInner, 'TKey>*

resultSelector:Func<'TOuter, 'TInner, 'TResult>->IEnumerable<'TResult>

类型参数

TOuter

第一个序列中的元素的类型。

TInner

第二个序列中的元素的类型。

TKey

键选择器函数返回的键的类型。

TResult

结果元素的类型。

参数

outer

类型: System.Collections.Generic.IEnumerable <TOuter>

要联接的第一个序列。

inner

类型: System.Collections.Generic.IEnumerable <TInner>

要与第一个序列联接的序列。

outerKeySelector

类型: System.Func <TOuter, TKey>

用于从第一个序列的每个元素提取联接键的函数。

innerKeySelector

类型: System.Func <TInner, TKey>

用于从第二个序列的每个元素提取联接键的函数。

resultSelector

类型: System.Func <TOuter, TInner, TResult>

用于从两个匹配元素创建结果元素的函数。

返回值

类型: System.Collections.Generic.IEnumerable <TResult>

一个具有 TResult 类型元素的 IEnumerable<T>,这些元素是通过对两个序列执行内部联接得来的。

使用说明

在 Visual Basic 和 C# 中,可以在 IEnumerable<TOuter>类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时,请省略第一个参数。有关更多信息,请参见 扩展方法 (Visual Basic)或 扩展方法(C# 编程指南)。

异常

--------------------------------------------------------------------------------

异常 条件

ArgumentNullException

outer 或 inner 或 outerKeySelector 或 innerKeySelector 或 resultSelector 为 null。

备注

--------------------------------------------------------------------------------

此方法通过使用延迟执行实现。

即时返回值为一个对象,该对象存储执行 *** 作所需的所有信息。

只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。

使用默认的相等比较器 Default 对键进行哈希处理和比较。

联接是指基于某个公共键使两个信息源的元素相关联的 *** 作。

Join 在一个方法调用中产生两个信息源和使它们相匹配的密钥。

这与 SelectMany 的用法不同,后者需要一个以上的方法调用才可以执行相同的 *** 作。

Join 保留 outer 中的元素的顺序,并且对于这些元素中的每一个元素,保留 inner 中的匹配元素的顺序。

在查询表达式语法中, join (Visual C#) 或 Join (Visual Basic) 子句转换为 Join 的一个调用。

在关系数据库术语中, Join 方法实现内部同等联接。'

“内部”表示结果中仅包含在另一序列中具有匹配项的元素。

“同等联接”是在其中比较键是否相等的联接。

左外部联接 *** 作没有专用的标准查询运算符,但可以使用 GroupJoin 方法执行此 *** 作。

请参见 联接运算。

示例

--------------------------------------------------------------------------------

下面的代码示例演示如何使用 Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>) 基于公共键对两个序列执行内部联接。

VBC#C++F#JScript以带有颜色区分的格式查看复制到剪贴板打印Structure Person

Public Name As String

End Structure

Structure Pet

Public Name As String

Public Owner As Person

End Structure

Sub JoinEx1()

Dim magnus As New Person With {.Name = "Hedlund, Magnus"}

Dim terry As New Person With {.Name = "Adams, Terry"}

Dim charlotte As New Person With {.Name = "Weiss, Charlotte"}

Dim barley As New Pet With {.Name = "Barley", .Owner = terry}

Dim boots As New Pet With {.Name = "Boots", .Owner = terry}

Dim whiskers As New Pet With {.Name = "Whiskers", .Owner = charlotte}

Dim daisy As New Pet With {.Name = "Daisy", .Owner = magnus}

Dim people As New List(Of Person)(New Person() {magnus, terry, charlotte})

Dim pets As New List(Of Pet)(New Pet() {barley, boots, whiskers, daisy})

' Create a list of Person-Pet pairs, where each element is an

' anonymous type that contains a Pet's name and the name of the

' Person that owns the Pet.

Dim query = _

people.Join(pets, _

Function(person) person, _

Function(pet) pet.Owner, _

Function(person, pet) _

New With {.OwnerName = person.Name, .Pet = pet.Name})

Dim output As New System.Text.StringBuilder

For Each obj In query

output.AppendLine(obj.OwnerName &" - " &obj.Pet)

Next

' Display the output.

MsgBox(output.ToString)

End Sub

' This code produces the following output:

'

' Hedlund, Magnus - Daisy

' Adams, Terry - Barley

' Adams, Terry - Boots

' Weiss, Charlotte - Whiskers

Structure Person

Public Name As String

End Structure

Structure Pet

Public Name As String

Public Owner As Person

End Structure

Sub JoinEx1()

Dim magnus As New Person With {.Name = "Hedlund, Magnus"}

Dim terry As New Person With {.Name = "Adams, Terry"}

Dim charlotte As New Person With {.Name = "Weiss, Charlotte"}

Dim barley As New Pet With {.Name = "Barley", .Owner = terry}

Dim boots As New Pet With {.Name = "Boots", .Owner = terry}

Dim whiskers As New Pet With {.Name = "Whiskers", .Owner = charlotte}

Dim daisy As New Pet With {.Name = "Daisy", .Owner = magnus}

Dim people As New List(Of Person)(New Person() {magnus, terry, charlotte})

Dim pets As New List(Of Pet)(New Pet() {barley, boots, whiskers, daisy})

' Create a list of Person-Pet pairs, where each element is an

' anonymous type that contains a Pet's name and the name of the

' Person that owns the Pet.

Dim query = _

people.Join(pets, _

Function(person) person, _

Function(pet) pet.Owner, _

Function(person, pet) _

New With {.OwnerName = person.Name, .Pet = pet.Name})

Dim output As New System.Text.StringBuilder

For Each obj In query

output.AppendLine(obj.OwnerName &" - " &obj.Pet)

Next

' Display the output.

MsgBox(output.ToString)

End Sub

' This code produces the following output:

'

' Hedlund, Magnus - Daisy

' Adams, Terry - Barley

' Adams, Terry - Boots

' Weiss, Charlotte - Whiskers


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9976701.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存