linq 动态 多条件 查询

zhcncs 2012-07-11 10:57:03
var Check = (from S in DC.Study
join P in DC.Patient on S.PatientID equals P.pID
join R in DC.Result on S.StuID equals R.sID
where S.rMod == _mod //&& (beginDate <= [color=#0000FF]_Date&& endDate <= _Date)[/color]
select new
{
姓名 = P.pName,
性别 = P.SexTitle,
年龄 = DateTime.Now.Year - Convert.ToDateTime(P.birdat).Year,
是否打印 = S.IsPrinted,
}).Distinct();
其中的_Date是一个从下拉列表动态获取的时间类型。但在linq中不支持直接的拼接,请问有什么办法可以解决吗。
...全文
185 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2012-07-11
  • 打赏
  • 举报
回复

var Check = (from S in DC.Study
join P in DC.Patient on S.PatientID equals P.pID
join R in DC.Result on S.StuID equals R.sID
where S.rMod == _mod
select new {P,S};
if(!string.IsNullOrEmpty(_Date))
{
Check=Check.Where(c=>c.S.beginDate <= _Date && c.S.endDate <=_Date);
}

var result=Check.Select(c=>new

{
姓名 = c.P.pName,
性别 = c.P.SexTitle,
年龄 = DateTime.Now.Year - Convert.ToDateTime(c.P.birdat).Year,
是否打印 = c.S.IsPrinted,
}).Distinct();


我想我明白你的意思了,你说的是_Date有时可能为空,所以不参加where过滤
也就是这个?

http://blog.csdn.net/q107770540/article/details/5724013
q107770540 2012-07-11
  • 打赏
  • 举报
回复
你意思 _Date是string 类型的
那用Convert.ToDateTime()转换一下不就OK了

var Check = (from S in DC.Study
join P in DC.Patient on S.PatientID equals P.pID
join R in DC.Result on S.StuID equals R.sID
where S.rMod == _mod && (S.beginDate <= Convert.ToDateTime(_Date) && S.endDate <= Convert.ToDateTime(_Date))
select new
{
姓名 = P.pName,
性别 = P.SexTitle,
年龄 = DateTime.Now.Year - Convert.ToDateTime(P.birdat).Year,
是否打印 = S.IsPrinted,
}).Distinct();
zhcncs 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
[/Quote]




重新上传图片。为什么不支持本地上传呢。。。
zhcncs 2012-07-11
  • 打赏
  • 举报
回复
我去, 图挂了,刚发表时还显示呢。
zhcncs 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
不知道如何表达,就举例子说明一下具体情况
[/Quote]
图1:
图2:
这两张图不知道可能给您提供信息否, 点查询,根据所选的项进行查询,主要就是日期范围上我不会写,它是根据我所选的【日期按】。和后面的两个时间范围来查的。, 【日期按】中有好几项,这几项在数据库中也有相应的列如图2
查询出所选时间类型在所选的时间段之间的数据。
逻辑上我是这么想的,先根据选的时间类型查出数据库中的对应时间类型列的所有数据,然后在筛选出所选的两个时间段之间的数据,,,,

请问怎么写查询语句呢?
q107770540 2012-07-11
  • 打赏
  • 举报
回复
不知道如何表达,就举例子说明一下具体情况
zhcncs 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
你意思 _Date是string 类型的
那用Convert.ToDateTime()转换一下不就OK了

var Check = (from S in DC.Study
join P in DC.Patient on S.PatientID equals P.pID
join R in DC.Result on S.StuID equals R.sID
where S.r……
[/Quote]
说起来有点复杂, 首先,_Date是从一个下拉列表中获取出来的一个时间类型,因数据库中保存有好几种时间类型,所以_Date也是不固定的, 说到这,我似乎感觉我这么写的不对, 应该先把当前所选的时间类型的所有时间数据都查出来, 然后在筛选出这些数据中 大于开始时间小于结束时间的所有数据。 呃,,,搞的有点晕, 不知道怎么写了。。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧