繁体   English   中英

在 C# 中使用 linq to datatable 的 SQL 查询的等效代码是什么?

[英]What is the equivalent code of SQL query in C# with linq to datatable?

这是我在 T-SQL 中的查询,我想在 C# 中使用 linq to datatable 做确切的事情。

select
    @found = MorningIsWorking, 
    @Sh_startTime = MorningStart, 
    @Sh_endTime = MorningEnd 
from t 
where 
    t.plannum = @pn and 
    t.Date = @datepart and 
    (@timepart between MorningStart and MorningEnd)

其中MorningIsWorking是布尔值, MorningStartMorningEnd@timepart是时间, @datepart是 DateTime

已编辑

这就是我所做的,但我不知道它是否正确以及如何在变量中获取所需的值。

var res = from row in dt.AsEnumerable()
                  where row.Field<string>("plannum") == "995" &
                  row.Field<DateTime>("date") == Convert.ToDateTime("2016-08-25 10:25:00").Date &
                  Convert.ToDateTime(timepart) >= row.Field<DateTime>("MorningStart") &
                  Convert.ToDateTime(timepart) < row.Field<DateTime>("MorningEnd")
                  select row;

根据您提供的信息,我相信这是您要完成的工作的 LINQ。

DateTime timepart = new DateTime(2017,2,7);
DateTime datepart = new DateTime(2016, 8, 25, 10, 25, 0);
string plannum = "995";

using (DataSet1 dt = new DataSet1())
{
     var res = from row in dt.t.AsEnumerable()
          where row.plannum == plannum &&
          row.Date == datepart &&
          timepart >= row.MorningStart &&
          timepart < row.MorningEnd
          select row;

     foreach (var row in res)
     {
          var found = row.MorningIsWorking;
          var shStartTime = row.MorningStart;
          var shEndTime = row.MorningEnd;
     }
}

或者,如果您只期望返回一行,则可以按如下方式省略 foreach 循环。

DateTime timepart = new DateTime(2017,2,7);
DateTime datepart = new DateTime(2016, 8, 25, 10, 25, 0);
string plannum = "995";

using (DataSet1 dt = new DataSet1())
{
     var res = (from row in dt.t.AsEnumerable()
          where row.plannum == plannum &&
          row.Date == datepart &&
          timepart >= row.MorningStart &&
          timepart < row.MorningEnd
          select row).Single();


     var found = res.MorningIsWorking;
     var shStartTime = res.MorningStart;
     var shEndTime = res.MorningEnd;
}

我使用了这个代码,它对我有用。

DataRow row = dt.AsEnumerable().FirstOrDefault
            (r => (DateTime)r["date"] == timeToCompare.Date
            & r.Field<string>("plannum") == "0995" &
            tp >= r.Field<TimeSpan>("MorningStart") &
            tp < r.Field<TimeSpan>("MorningEnd"));

然后使用它来获取值:

sh_starttime = row["MorningStart"].ToString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM