linq to entites 写查询语句 如何像 sql 文那样拼串

netboool 2010-11-17 09:30:03
我在网上开了一些文章,对于一些简单的linq 可以用expression来拼 ,但是仍然不知道复杂的如何来拼,难道真需要用那种极其复杂的繁琐的表达式树,一点点的拼起来吗?那不是噩梦么?

如下: var q = from tohos in orgUnbalance(start, end)
group tohos by new { tohos.NEWTIME.Year, Quarter = (tohos.NEWTIME.Month-1) /3 } into gs
select new StatisRet
{
DateTile = new Dates { Year = gs.Key.Year, Quarter = gs.Key.Quarter, },
Group = gs.GroupBy(c =>
(c.NEWTIME.Year - c.BIRTHDAY.Value.Year) / 10
).Select(d => new
{
Id = (int)d.Key >= 7 ? 7 : (int)d.Key,
Count = d.Sum(c => c.BALANCE)
}).GroupBy(c => c.Id).Select(d => new StatisLine
{
Id = (int)d.Key,
Count = (double)d.Sum(c => c.Count)
})
.OrderBy(n => n.Id)
};

orgUnbalance(start, end)是

protected IEnumerable<Unbalance> orgUnbalance(DateTime start, DateTime end)
{

return orgBalance(start, end, c => new PatientGroupId { CH_PATIENT_ID = c.AC_PATIENT_ID }).Join(_analysisEntity.PATIENT_TBL, m => m.PB_PATIENT_ID, n => n.PB_PATIENT_ID, (m, n) =>
new Unbalance { PB_PATIENT_ID = n.PB_PATIENT_ID, BIRTHDAY = n.BIRTHDAY, NEWTIME = m.NEWTIME, BALANCE = m.BALANCE });
}



请教一下各位大大,这两个个linq里面的那些条件,即lambda表达式如何根据条件去拼写?万分感激~~
分可以追加
...全文
264 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
netboool 2011-12-06
  • 打赏
  • 举报
回复
忘了结贴了,用变量做存储方法内的内容,可以解决部分问题。
stockdetail 2010-11-30
  • 打赏
  • 举报
回复
var ds=tohos.AsQueryable();
ds=ds.Where(d=>条件1);
ds=ds.Where(d=>条件2);
..........
var result=(
from d in ds
group ....
select new {...}
);
netboool 2010-11-17
  • 打赏
  • 举报
回复
q107770540
谢谢回复,不过你这里写的只是and和or太过简单了。我上面写的linq的条件拼接要怎么来实现呢,比如gruopby
q107770540 2010-11-17
  • 打赏
  • 举报
回复
利用LINQ的延迟查询来实现多条件拼接查询
http://blog.csdn.net/q107770540/archive/2010/07/09/5724013.aspx
netboool 2010-11-17
  • 打赏
  • 举报
回复
是这样,可能我上面那个问题说的很不清楚还有错误,其实IEnumerable不能作为表达式树解析的结构,IQueryable可以,一般简单的拼接,直接用Expression就可以用了。
但是复杂一点的,我就不清楚了,如下:

from tohos in
orgCancel(start, end)
group tohos by new { tohos.RESERVE_TIME.Year, Half = (tohos.RESERVE_TIME.Month - 1) / 6 }
into gs
select new
{
gs.Key,
Group = gs.GroupBy(c => new
{
c.RESERVE_TIME.Year,
c.RESERVE_TIME.Month,
c.RESERVE_TIME.Day
}
).Select(d => new
{
d.Key,
Count = denoReservePatientCount(start, end, d.Key.Year, d.Key.Month, d.Key.Day, d.Count())
})
}

protected double denoReservePatientCount(DateTime start, DateTime end, int Year, int Month, int Day, int num)
{
return num == 0 ? 0 : 100d * (double)num /
denoReservePatient(start, end).Where(c => c.RESERVE_TIME.Year == Year && Month == c.RESERVE_TIME.Month && Day == c.RESERVE_TIME.Day
).Count();
}
denoReservePatientCount 这个方法其实在表达式树的解析中会出错,报说linq to entites 无法解析这个方法,但是我的sql统计中大量存在 比如denoReservePatientCount的方法,那我该怎么来拼接他呢?
望赐教
claymore1114 2010-11-17
  • 打赏
  • 举报
回复
表达式树。

8,497

社区成员

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

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