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();