【问题标题】:Simple LINQ Select Statement简单的 LINQ 选择语句
【发布时间】:2015-10-29 17:10:25
【问题描述】:

我在使用 LINQ 选择语句时遇到了基本困难。

我想要的很简单:我有一个 ID。我使用该 ID 从表中获取特定值。它确实有效,但有点扭曲......

代码如下:

var myDate = dbContext.tbl_mytable.Where(i => i.myID == item.myID)
                          .Select(i => new {Name = i.KeySourceDate});

我在 myDate 中期待 DateTime。图片显示的是我得到的。

我理解 name = thedate 的最终值,因为它在 select 语句中。

最后我需要的只是一个格式为 .ToString("dd/MM/yyyy") 的日期,而不是整个对象,或者来自 LINQ 的任何内容。

【问题讨论】:

  • .Select(i => i.KeySourceDate.ToString("YourFormat"));?!

标签: c# .net linq


【解决方案1】:

您正在检索具有 ID 的行列表,但您说您想要的是单个日期时间。有很多方法可以做到这一点,具体取决于您希望在找到具有该 ID 的多行的情况下发生什么,或者如果没有找到具有该 ID 的行,但这是一种这样的方式:

var myDate = dbContext.tbl_mytable.First(i => i.myID == item.myID).KeySourceDate;

【讨论】:

  • 在数据层格式化日期是不好的做法,因此,我跳过了这部分,因为他应该在 UI 部分执行。
  • 如果您希望在指定 ID 的行超过 1 行时抛出错误,也可以使用 .Single。如果您不确定记录是否存在,也可以使用.Where(i=>i.myID==item.myID).Select(i=>i.KeySourceDate).FirstOrDefault();
【解决方案2】:

您可以评估Id 之前是否存在以尝试获取结果。 但基本上,您可以使用以下方法获取日期:

DateTime? myDate;
var record = dbContext.tbl_mytable.FirstOrDefault(i => i.myID == item.myID);
if (record != null){
myDate = record.KeySourceDate
}

【讨论】:

    【解决方案3】:

    当您通过 Linq 请求日期字段时,您通常会得到一个 DateTime 对象。您所要做的就是在分配值时使用格式化字符串作为参数调用 toString() 方法,例如: ...

    new { Name = i.KeySourceDate.toString("dd/MM/yyyy") }
    

    【讨论】:

    • 假设他正在使用由数据库支持的 LINQ 提供程序,则很有可能不支持 ToString() 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2012-01-12
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多