简单地说,这有效:
Database db = DatabaseWrapper.GetDatabase();
string dd = e.ParsedData.Date.ToString("yyyyMMdd");
var todaysflights = db.Flights.GetList(x => x.ScheduleDateTime.Contains("20150413")).ToList();
但这不是,
Database db = DatabaseWrapper.GetDatabase();
string dd = e.ParsedData.Date.ToString("yyyyMMdd");
var todaysflights = db.Flights.GetList(x => x.ScheduleDateTime.Contains(dd)).ToList();
这是在一个事件处理程序中,我可以向你保证,当我将它打印到控制台时,dd中的值正是" 20150413"。
更新
方法GetList工作正常,因为我得到了预期的结果,它返回一个IEnumerable:
var todaysflights = db.Flights.GetList(x => x.ScheduleDateTime.Contains("20150413")).ToList();
这是该日期的航班列表。
我正在使用Contains,因为ScheduleDateTime字段类似于" 20150413164500",而不是DateTime。我也可以使用StartsWith,但我相信这不是问题。
当我说不起作用时,我的意思是当我使用变量" dd"运行GetList时当使用硬编码字符串时,我得到一个空列表" 20150413"我得到一份包含1868个结果的列表。
打印到控制台时dd的值恰好是" 20150413"。
e.ParsedData有一堆数据从条形码阅读器解析,而Date属性的类型是DateTime,这就是为什么e.ParsedData.Date.ToString(" yyyyMMdd")给了我想要的格式
我对这个不完整的问题感到非常抱歉,我刚写作时就离开了工作。
谢谢你们快速回复。
更新2
我一直在测试,以下代码返回预期结果(包含大量数据的列表):
var dd = e.ParsedData.Date.ToString("yyyyMMdd");
var todaysflights = _db.Flights.GetList(x => x.ScheduleDateTime.Contains(""+dd)).ToList();
任何人都可以告诉为什么这个"" + dd使表达式给我的结果预期不是空的List?
谢谢
答案 0 :(得分:0)
代码上发生了很多奇怪的事情。
我假设GetList
返回一个列表,为什么GetList().ToList()
和LINQ x.ScheduleDateTime.Contains(dd)
什么是ScheduleDateTime
? string
或DateTime
?根据您的问题,它被声明为string
,但它的名称为DateTime
。 (最后我假设e.ParsedData
为DateTime
,您可以改为e.ParsedData.ToString("yyyyMMdd");
。
基于我假设GetList
实际返回一个列表而ScheduleDateTime
包含DateTime
所以我会尝试直接比较日期时间而不是将列表上的工作加倍。
Database db = DatabaseWrapper.GetDatabase();
DateTime dd = e.ParsedData.Date;
var todaysflights = db.Flights.GetList(x => x.ScheduleDateTime.Date == dd);
如果所有其他方法都失败,则将其投放到foreach
。然后你可以很好地调试每个循环,交替try/catch
Database db = DatabaseWrapper.GetDatabase();
DateTime dd = e.ParsedData.Date;
List<Flight> todaysflights = new List<Flight>();
foreach (var a in db.Flights.GetList()){
try
{
if(a.ScheduleDateTime.Date() == dd){
todaysflights.Add(a);
}
}
catch(Exception ex)
{
//Print some caught error but don't break program
}
}