C# 在Linq中将Datetime转换为可为空的Datetime时出错

C# 在Linq中将Datetime转换为可为空的Datetime时出错,c#,linq,datetime,C#,Linq,Datetime,我有一个结构如下的列表: public class Factor { public DateTime? date { set; get; } public string InnovoiceId { set; get; } public string explain { set; get; } public string factroyName { set; get; } public st

我有一个结构如下的列表:

          public class Factor
    {
        public DateTime? date { set; get; }
        public string InnovoiceId { set; get; }
        public string explain { set; get; }
        public string factroyName { set; get; }
        public string tax { set; get; }
        public string transport { set; get; }
        public Int64? bedehkar { set; get; }
        public Int64? bestankar { set; get; }
        public Int64? mande { set; get; }

    }
        List<Factor> factors = new List<Factor>();
这里的因子排序列表是一个已排序的因子列表。paymentInfo是一个列表,我想获取一些信息并将它们放入我的当前列表factorSortListpayDate是一个数据类型为DateTime的列

我得到了这个错误:

 Error  22  Cannot implicitly convert type 'System.Linq.IQueryable<System.DateTime?>' to 'System.DateTime?'
错误22无法将类型“System.Linq.IQueryable”隐式转换为“System.DateTime?”
I

尝试方法:

或者,如果要进行空检查:

temp.date = paymentInfo.Where(i => i.invoiceNo == temp.InnovoiceId)
                        .Select(i => i.payDate) 
                        .FirstOrDefault();

即使在您的示例中不会发生这种情况,也可能返回多个对象。您需要做的是使用,它只返回一个对象:

temp.date = paymentInfo.First(i => i.invoiceNo == temp.InnovoiceId).payDate);

选择返回
IEnumerable
,因此必须提取精确值;我使用
First()
来实现它。请试一试

   foreach (Factor temp in factorSortList)
   {
       temp.date = paymentInfo.Where(i => i.invoiceNo == temp.InnovoiceId).Select(i => i.payDate).First();
   }
使用以下内容更新您的代码:

temp.date = paymentInfo.Where(i => i.invoiceNo == temp.InnovoiceId).Select(i => i.payDate).First();

问题:如果源payDate为空,您希望在列表中显示什么?只需将“No date inserted”放在@user3216600上,这将不必要地创建枚举数。请检查我的答案,以获得更有效的方法。@user3216600我们刚刚用它同时回答了一个问题,他的答案必须和我的一样好。嘿,downvoter,你能评论一下吗,我的密码怎么了?你的答案和我的有什么不同Rustam@user3216600它使用
First
方法,而不是使用
Where
然后再使用
First
,这意味着它不需要不必要地创建枚举数。我要添加.FirstOrDefault(),因为Where条件没有项,将抛出异常
   foreach (Factor temp in factorSortList)
   {
       temp.date = paymentInfo.Where(i => i.invoiceNo == temp.InnovoiceId).Select(i => i.payDate).First();
   }
temp.date = paymentInfo.Where(i => i.invoiceNo == temp.InnovoiceId).Select(i => i.payDate).First();