【问题标题】:LINQ equivalent for a T-SQL queryT-SQL 查询的 LINQ 等效项
【发布时间】:2025-12-22 12:15:06
【问题描述】:

我有带列的表格:

ID(int), Ano(varchar), Bno(varchar), StartTime(DateTime), EndTime(DateTime)

此 SQL 查询的等效 LINQ 语句是什么:

 SELECT 
    StartTime, EndTime, Ano, Bno,  
    datediff(s, StartTime, EndTime) as duration 
 FROM 
    TABLENAME 
 where 
    StartTime >= 'value Input by user' 
    and StartTime <= 'value INPUT by user' 
 order by 
    StartTime desc

在这里,我如何选择将值转换为分钟的持续时间。以分钟和秒为单位计算所有记录的总时长

【问题讨论】:

  • 要么你使用 Entity Framework 作为你的 ORM - 或者你使用 Linq-to-SQL 代替 - 但你不能同时使用同时。你真正使用的是哪一个?
  • 实体框架4数据库优先

标签: asp.net-mvc-3 sql-server-2008 entity-framework-4


【解决方案1】:
DateTime startTime = <Startime given by user>;
DateTime endTime = <Endtime given by user>;

var result = 
yourSource
  .Where (m => m.StartTime >= startTime && m.StartTime<= endTime)
  .OrderByDescending(m => m.StartTime)
  .Select(m => new {
     startTime = m.StartTime,
     endTime = m.EndTime,
     ano = m.Ano,
     bno = m.Bno,
     duration = SqlFunctions.DateDiff("mi", m.StartTime, m.EndTime)
});

顺便说一句,你也可以得到没有持续时间的结果,并在检索结果后计算它(避免匿名)

类似:

var duration = (EndTime - StartTime).Minutes;

【讨论】:

    【解决方案2】:

    匹配以下代码:

    var result = from Entityname in EntityListName
        where Entityname.StartTime >= 'value Input by user' etc ...
        orderby Entityname.StartTime descending 
        select Entityname;
    

    【讨论】:

    • 我们可以在 select 中添加 datediff()
    • 你需要类似 between 但 AFAIK 你必须正常比较 gt>= 和 lt