首页 新闻 会员 周边 捐助

将一段sql语句转换成linq或者lambda表达式

1
悬赏园豆:20 [已解决问题] 解决于 2016-11-07 09:28
SELECT  Call_Date,Call_Address
FROM    SuspectCallList AS t
WHERE   NOT EXISTS ( SELECT  1
                     FROM   SuspectCallList
                     WHERE  SPID = t.SPID
                            AND CONVERT(VARCHAR(8) , Call_Date ,112) = CONVERT(VARCHAR(8) , t.Call_Date , 112)
                            AND Call_Date < t.Call_Date )order by Call_Date

 

 

 

为了取数据库中每一天的第一条和最后一条记录,如果能直接用lambda表达式或者linq语句更好,新人求解!

唐宋元明清丶的主页 唐宋元明清丶 | 初学一级 | 园豆:95
提问于:2016-11-02 18:42
< >
分享
最佳答案
-1
  List<Product> products = GetProductList();

                var categoryCounts =
                    from prod in products
                    let gDate=prod.Call_date.toShortDateString()
                    group prod by gDate into prodGroup
                    select new { Call_date = prodGroup.Key, ProductFirst = prodGroup.First(),ProductLast = prodGroup.Last() };    

 

用Group对日期分组,然后再取数据,比你这个写的要简单些。

收获园豆:15
happydaily | 菜鸟二级 |园豆:260 | 2016-11-03 10:40
其他回答(2)
0

linq:先取出数据放到list中,然后按插入时间排序下,再加个条件必须是今天的数据,然后分别取第一条和最后一条。

WebForm写了一个Demo,你看下吧!希望对你有帮助。

 1  protected void Page_Load(object sender, EventArgs e)
 2         {
 3             List<UserInfo> userlist = new List<UserInfo>();
 4             UserInfo userinfo1 = new UserInfo() { InsertDate=Convert.ToDateTime("2016-11-2 7:33")};
 5             UserInfo userinfo2 = new UserInfo() { InsertDate=Convert.ToDateTime("2016-11-2 7:34")};
 6             UserInfo userinfo3= new UserInfo() { InsertDate=Convert.ToDateTime("2016-11-2 7:35")};
 7             UserInfo userinfo4 = new UserInfo() { InsertDate = Convert.ToDateTime("2016-11-3 7:35")};
 8             userlist.Add(userinfo2);
 9             userlist.Add(userinfo1);
10             userlist.Add(userinfo3);
11             userlist.Add(userinfo4);
12 
13             DateTime today= DateTime.Now;
//这里是你想要的答案
14 UserInfo userinfoGetFirstone = userlist.Where(x => x.InsertDate.ToString("yyyy-MM-dd") == today.ToString("yyyy-MM-dd")).ToList().OrderBy(x => x.InsertDate).FirstOrDefault(); 15 UserInfo userinfoGetLastone = userlist.Where(x => x.InsertDate.ToString("yyyy-MM-dd") == today.ToString("yyyy-MM-dd")).ToList().OrderBy(x => x.InsertDate).LastOrDefault(); 16 } 17 public class UserInfo 18 { 19 public DateTime InsertDate { get; set; } 20 } 21 }

 

收获园豆:5
~扎克伯格 | 园豆:1923 (小虾三级) | 2016-11-02 21:07

这样只能取出一条数据吧,我要的是每一天的两条数据,加的这个条件是什么意思?

支持(0) 反对(0) 唐宋元明清丶 | 园豆:95 (初学一级) | 2016-11-02 21:16

@唐宋元明清丶: userinfoGetFirstone、userinfoGetLastone 这不是两条数据?看不懂的话可以说出来的,麻烦您Debug看下结果。 加的条件是:过滤掉不是今天的数据

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2016-11-03 08:32

@IT民工-杰: 我运行过你的demo了,但是你可能没有明白我的意思,你这个运行出来获取的是按日期排序的第一条和最后一条数据,如果有两天,那我第一天晚上的数据和第二天早上的数据呢?

支持(0) 反对(0) 唐宋元明清丶 | 园豆:95 (初学一级) | 2016-11-03 10:11

@唐宋元明清丶: 大兄弟,你的需求到底是不是取每天的第一条和最后一条?假如你今天去取今天和昨天插入的数据,为什么会有昨天晚上的数据?过滤条件是直接比较天,不考虑时、分、秒的。Where(x => x.InsertDate.ToString("yyyy-MM-dd") == today.ToString("yyyy-MM-dd"),不明白可以再交流。。。

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2016-11-03 10:29

@IT民工-杰: 不是每天取每天的数据,我要取数据库里的以前的每天早上第一条和晚上第一条,插入的新数据暂时不考虑,是我之前表达不清楚,大兄弟贱笑了。。

支持(0) 反对(0) 唐宋元明清丶 | 园豆:95 (初学一级) | 2016-11-03 10:48

@唐宋元明清丶: 那再按天分组啊

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2016-11-03 10:59

@IT民工-杰: Call_Date字段就是天啊,年月日时分秒都在这个字段里

支持(0) 反对(0) 唐宋元明清丶 | 园豆:95 (初学一级) | 2016-11-03 11:04

@唐宋元明清丶: 

1   var userinfoGet= (from Userinfo in userlist
2                     let Day = Userinfo.InsertDate.Day
3                     orderby Userinfo.InsertDate
4                     group Userinfo
5                     by Day into userinfoGroup
6                     select new { UserFirst = userinfoGroup.First(), UserLast = userinfoGrup.Last() }).ToList();

再试下这段吧!送你一句话:清晰无歧义地表达问题,会事半功倍!

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2016-11-03 11:27

@IT民工-杰: 好的!谢谢大哥!

支持(0) 反对(0) 唐宋元明清丶 | 园豆:95 (初学一级) | 2016-11-03 12:57
0

你需要一个工具:LinqPad,这三种写法随便转

balahoho | 园豆:2050 (老鸟四级) | 2016-11-03 09:31

我试过了,sql语句放上面点 lambda是空白的

支持(0) 反对(0) 唐宋元明清丶 | 园豆:95 (初学一级) | 2016-11-03 10:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册