Asp.net LINQ groupby和orderBy在日期上未检索到预期的输出
技术问答
218 人阅读
|
0 人回复
|
2023-09-12
|
我正在使用linq2sql处理asp.net mvc3应用程序。2 d% C" y8 t& l5 q Q/ S j
我有一个SiteLog对象类型列表还包括每个对象:一个名称CLRExceptionType字符串和一个名字EntryDate字典中包含此列表:' k, n, P8 f. l' Z& W
private Dictionary> dataBaseList = new Dictionary>();DataClasses1DataContext db = new DataClasses1DataContext("string1");DataClasses1DataContext db2 = new DataClasses1DataContext("string2");然后在函数中的同一控制器中填写词汇表:
. S4 P% ?5 r+ y! \3 @ private void CreateDictionary()()()()()()()( )()()()()()()()()()()()()()()()())())()())()())())()()()()())()())()()())())()()())()()()()()())()())())()())()())())())())()())()()()())())()())())()()))()()())())())())()()()))())()())()())()()())())())())())())())())()())())())()))()))()))()))())())()))())))())))))()))))()))()))())))())()))())))()))))())))()))))())))))()))))()))())))())))()))()))))()))()))()))))))()))))))())))()))))()))))()))))()))())))))()))))()))())))))()))))))))()()()))())))))))))())))))))))())))))))))())())()())()))())))))()))))()))))))))())))))))))())))))))))())))))())()))))dataBaseList.Add("db",db.SiteLogs.ToList(); dataBaseList.Add("db2",db2.SiteLogs.ToList());}然后我有这个Linq查询:
, W5 i+ v8 D% g1 {* rvar result =dataBaseList.GroupBy(x => x.Key) .SelectMany(x => x.SelectMany(n => n.Value .GroupBy(g => g.CLRExceptionType) .Select(g => new DB = x.Key, Exception = g.Key, Count = g.Count(), LastOccured = g.Max(y => y.EntryDate) )).OrderBy(x => x.DB) .ThenByDescending(x => x.LastOccured);那应该给我以下输出
+ c8 D+ v6 ?: ADatabase1:5 _' u" s' F( F E0 q4 c
Exception1(22次)上次发生:22.22.1989 19:30; s# k, X: W |( o% I
Exception2(2)20.5.1980 14.50 F5 d- p8 I8 H D
Database25 }7 t" r/ V( L
Exception1(22次)上次发生:21.10.1989 19:30
' N: w; Q5 o" p* xException2(2)20.5 .1980 14.50
$ S! B: n5 ]. l3 V3 t然后突然用数据库2中的新项目更新列表,所以我必须把这个数据库放在前面:$ g! C. R1 @7 F2 _: g& l+ T
数据库2
0 e; T( t+ k f( XException1(1次)最后9 Z' d) j- [! d# n. ~0 f8 n
一次出现:29.07.2011 12.00 Exception1(22次)最后一次出现:21.10.1989 19:30
0 ]/ t1 o( U1 {' ^. r5 dException最后一次发生在20次(2次).5.1980 14.50
$ g6 F( W# m- \6 G" }) j: g: A F/ _Database1:
5 e1 y$ [7 ~8 tException最后一次发生在:22.10.1989 19:30
) C2 m& v" Q3 v: k& U0 u. {Exception最后一次发生在20次(2次).5.1980 14.50
4 o5 I- Y8 A B因此,基本上,我可以根据日期对数据库中的日志进行排序,但我不能根据数据库上的最后日期对数据库进行排序。如何解决这个问题?查看代码(Index.cshtml):
w9 L, I$ f5 Y, V" q( Q b3 a@{ string firstTime = "";} @foreach( var database in Model) int currentCol = if (!(firstTime == database.DB))
# C6 ~7 x2 Q+ S# }! S( k& _ @database.DB currentCol = 0; @if (database.Count > 999) @database.Count else @database.Count Exceptions of Type: @database.Exception Siste: @database.LastOccurred currentCol = 1; if (currentCol == 2columns were displayed,switch row currentCol = 0;
- `. B U8 ], \} firstTime = database.DB; }提前Tnx
7 W: j' M! |" b5 D5 _ 0 U8 K) h2 r' F/ [8 \( D
解决方案: % p1 N2 |& {8 ?3 c0 Y( v5 o, o
解决这个问题的一种方法是在拥有数据之前L2SQL切换到L2Object,然后再分组排序:
% Z( R; J9 ?: ~var result = dataBaseList.GroupBy(x => x.Key) .SelectMany(...) .AsEnumerable() .GroupBy(x => x.DB) .OrderByDescending(g => g.Max(x => x.LastOccured));这将给你组列表和Key的DB,群体的最后一个异常顺序。
) L0 t7 t5 q. ^7 b9 M可以使用嵌套结果foreach循环:
) s2 J! |2 s0 N% wswitch row currentCol = ( }( I G3 Z/ U# r( }' H* [
switch row currentCol = 0;
' h( J) L$ d0 H, k } } } |
|
|
|
|
|