C#将带掩码的字符串中可为空的DateTime转换为Select New

本文关键字:DateTime 转换 New Select 掩码 字符串 | 更新日期: 2023-09-27 17:58:17

我必须从实体框架重试可为null的Datetime,并将其转换为以下类型的掩码字符串:ToString("dd-MM-yyyy")

我用这个代码重试所有值(现在我显示唯一的DataLead)

 var dbResult = conc.Clientes.Where(x => x.StatoCliente == "1").ToList();
                var leads = from e in dbResult
                            select new
                            { 
                              e.DataLead
                            } into selectedLead
                            select selectedLead;
                return Json(leads, JsonRequestBehavior.AllowGet);

在我代码的另一部分,我用这个代码进行转换:

 DateTime date = (DateTime) DataLead;
 string dateElaborated = date.ToString("dd-MM-yyyy");

但是,如何在LINQ选择函数中执行此操作?

感谢所有

C#将带掩码的字符串中可为空的DateTime转换为Select New

您可以使用字符串。格式(假设e.DateLead是可为null的DateTime类型):

var dbResult = conc.Clientes.Where(x => x.StatoCliente == "1").ToList();
var leads = from e in dbResult
    select new
    {
        Datalead = string.Format("{0:dd-MM-yyyy}", e.DataLead)
    };

或者C#6 中的新功能

var leads = from e in dbResult
    select new
    {
        Datalead = e.DataLead?.Value.ToString("dd-MM-yyyy")
    };
var leads = conc.Clientes
    .Where(o => o.StatoCliente == "1" && o.DataLead.HasValue)
    .Select(o => o.DataLead.Value.ToString("dd-MM-yyyy"))
    .ToList();

简单明了。此外,我强烈建议不要使用像"1"这样的字符串文字,而是引入枚举或常量值。

这个怎么样:

// Get alternative text if DataLead is null
var leads = dbResult.Select(entry => entry.DataLead)
                    .Select(date => date.HasValue 
                                    ? date.Value.ToString("dd-MM-yyyy") 
                                    : "unknown");
// Get only entries where DataLead is not null.
var leads = dbResult.Select(entry => entry.DataLead)
                    .Where(entry => entry.HasValue)
                    .Select(date => date.Value.ToString("dd-MM-yyyy"));
var leads = from e in dbResult
            select new {
                selectedLead = e.DataLead != null ? e.DataLead.ToString("dd-MM-yyyy"): string.Empty
            };