linq中判断DateTime类型是否为空

在linq中判断如下代码
var query = (from n in EntityDb.News
where String.IsNullOrEmpty(news.id) ? true : n.id == news.id
where String.IsNullOrEmpty(news.title) ? true : n.title == news.title
where String.IsNullOrEmpty(news.content) ? true : n.content == news.content
where String.IsNullOrEmpty(news.userid) ? true : n.userid == news.userid
where (news.dateTimeNow==null) ? true : n.dateTimeNow == news.dateTimeNow
orderby n.id ascending
select n);

红字的那一段是我写的代码,dateTimeNow 在数据库中是datetime类型的不允许为空!上方的代码是一个查询方法,根据我传递过来的参数进行查询。既然是查询,肯定不是一定要每个参数都有值的。问题就出现在,当news实体传递过来的时候如果dateTimeNow为空的话。查询就会报“SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。
”如何解决。主要就是判断当news.dateTimeNow==null是怎样让他不执行where (news.dateTimeNow==null) ? true : n.dateTimeNow == news.dateTimeNow现在只要执行到这一句就报错!!!问了好几个同事都没有最优的解决方案。希望 各位大大,指教一下。
上述问题现已经解决,现在请教Linq中如何格式化DateTime类型的数据。什么?Convert.ToDateTime(),xxx.ToString()之类的就不用说了。那不中!!!!目前已经有一种比较笨笨的解决方式
query = query.Where(n =>n.dateTimeNow.Year == news.dateTimeNow.Year
&& n.dateTimeNow.Month == news.dateTimeNow.Month
&& n.dateTimeNow.Day == news.dateTimeNow.Day
&& n.dateTimeNow.Hour == news.dateTimeNow.Hour
&& n.dateTimeNow.Minute == news.dateTimeNow.Minute
&& n.dateTimeNow.Second == news.dateTimeNow.Second
想知道有没有更好的解决方案!!!满意++++++++++++++++分

Datetime是struct,值类型,值类型是不能为null的.只有Datetime的泛型表达DateTime?类型可以赋值为null,但这只是一种简写,DateTime?的实际类型为Nullable<DateTime>.所有值类型都可以转换为这种形式来赋值为null.
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-30
你可以试试使用.net的新特性
在C#声明这个日期字段的时候这样写
DateTime? time;
然后这个字段就可以设置空值
如time =null;
取值和赋值的时候使用的是 time.Value;
第2个回答  2011-08-30
用DateTime.MinValue作为未赋值标志
where (news.dateTimeNow==DateTime.MinValue)本回答被提问者采纳
第3个回答  2011-08-30
news.dateTimeNow == default(DateTime?)
或者
news.dateTimeNow==DBNull.Value

C#\/Linq高手进!关于可空日期的排序问题。
遍历他,判断如果他大于0,就是本身值,小于0就是-值变量 这就是绝对值嘛

LINQ to Entities 不支持指定的类型成员"Date".但报错的是int Total...
Result = Result.Where(o => o.ClickTime.Year == _Time.Year && o.ClickTime.Month == _Time.Month && o.ClickTime.Day == _Time.Day);前面还可以加判断避免错误:--- try { DateTime _Time;if (DateTime.TryParse(Key, out _Time)){ Result = Result.Where(o => o.ClickTime.Year =...

LINQ里如何设置查询条件的日期为昨天或者当天???
回答:如果是Entity to SQL查询,需要先声明AddDays(-1)的DateTime,再代入Linq去查询,否则无法直接转化SQL语句。 如果是Linq to Object,直接使用 字段 == DateTime.Now.AddDays(-1)就行了。

MVC中返回视图模型类型出错?
回答:注意,你linq select出来的是一个匿名对象,而在视图中的model类型指明了是List ,所以出错。

Linq to sql 有将datetime转换为string类型方法吗
select new { b.id,b.port_num,b.logical_check_dt, \/\/审核时间 datetime })这个时候依然是linq to EF 或to sql 转换成linq to obj 你就可以使用C#的一切东西了 (from b in db.Bg_Mains where b.organize_id == code.id)select new { b.id,b.port_num,b.logical_check_dt, ...

泛型集合中加add和不加add有什么区别?
最终赋值结果为0 --- 指的是哪里为0?如果说的是最后一句linq以后的结果,请优化判断方法,避免过多代码的干扰(你说的是初始化list的异同,那就不要把linq扯进来)

怎样把程序里面的datetime.now存入数据库的datetime字段?c# sqlServer...
Date类型是单纯存日期的,而DateTime是日期带时间的,当然需要截断了,两种解决二选一 一。数据库的字段类型改成datetime类型就可以了 二。date类型在c#里对应的是字符串,就是个长度为10的字符串,直接p1.date设置成字符串,然后p1.date=dt.ToString("yyyy-MM-dd")强烈不推荐用date类型对应datetime...

...\/这种字符串格式的时间,C#如何转换为DateTime格式?
dt = dt.ToLocalTime();result = dt.ToString("yyyy-MM-dd HH:mm:ss");return result;}\/\/\/ \/\/\/ 将时间字符串转为Json时间\/\/\/ private static string ConvertDateStringToJsonDate(Match m){string result = string.Empty;DateTime dt = DateTime.Parse(m.Groups[0].Value);dt = dt.ToUni...

请教如何在LINQ中使用.NET函数
方法好像是这样的 public static double ToDateString(DateTime Tick){ DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));TimeSpan a = new TimeSpan(Tick.Ticks );TimeSpan b = new TimeSpan(dtStart.Ticks);TimeSpan ts = a.Subtract(b).Duration();double...

如何遍历查询出集合中日期在某个范围内的数据
public string Name;public DateTime date;} 你要遍历 List<A> list=new List<A>(); 这个集合 LIst<A> nlist=new List<A>();foreach(A a in list){ if(a.date 在某个时间范围内)nlist.add(a)} 最后 nlist 就是你想要的数据了 如果你用的是.Net3.0 之后的版本 可以用linq 更为简单...

相似回答