我想使用group by和剩余用户的计数使用linq lambda表达式更新最后一个用户。我不知道怎么能这样做。
这是我的数据:
userid | name | datetime | isdelete
1 | abc | 16-03-2017 15:45:59 | 0
1 | abc | 16-03-2017 12:45:10 | 0
2 | xyz | 16-03-2017 15:45:59 | 0
1 | abc | 16-03-2017 10:40:59 | 0
我希望结果看起来像这样:
userid | name | datetime | count
1 | abc | 16-03-2017 15:45:59 | 3
2 | xyz | 16-03-2017 15:45:59 | 1
此处count
的{{1}}应为3,因为表格中有三条记录。
我已经写了这个查询,但它正在所有记录。
userid = 1
任何人都知道如何获取我想要的数据?请使用linq lambda表达让我知道。
答案 0 :(得分:1)
您需要按用户分组,而不是对每个组进行排序,并从每个组中获取
var dataSupertags = {
div_id: 'supertags',
jsonData: superTags
};
function drawSupertagsWrapper(dataSupertags) {
var el = dataSupertags.div_id;
var data = dataSupertags.jsonData;
cnt = " * SUPERTAGS DEMO * ";
cnt += '<section id="main_carousel1" class="section_style_1 carousel1">';
cnt += '<div class="carousel1_content">';
cnt += '<div class="posts" id="carousel1_1" style="visibility:visible;">';
cnt += '<div class="wrapper" id="' + el + '_wrapper">';
cnt += '</div>';
cnt += '</div>';
cnt += '<div class="carouselNext carouselButton" onclick="carousel1_1.next()"></div>' + '<div class="carouselPrev carouselButton" onclick="carousel1_1.prev()"></div>';
cnt += '</div>';
cnt += '</section>';
document.getElementById(el).innerHTML = cnt;
}
function drawSupertagsItems(dataSupertags) {
var el = dataSupertags.div_id + '_wrapper';
var data = dataSupertags.jsonData;
document.getElementById(el).innerHTML = '';
for (i = 0; i < data.length; i++) {
jQuery.ajax({
dataType: 'json',
url: 'APIURL',
data: {
count: 5,
ret_fields: [
'props.title__AS__title',
'props.comentCount__AS__cc',
'fb_shares',
'props.pubfromdate_local__AS__pubdate',
'props.href__AS__href',
"props.media[indexof(x.type='media' for x in props.media)].otheralternate.300x200.href__AS__thumb",
].join(','),
type: 'type1,type2,type3',
tag_slugs: data[i].topics[0].slug,
order: 'pubfromdate-'
},
success: function(response) {
var postData = '';
postData += '<div class="swipe_item">';
postData += '<header class="swipe_list">';
postData += '<h1 class="active">' + '<a href="http://test.com/' + data[i].titleurl + '">' + data[i].title + '</a>' + '</h1>';
postData += '</header>';
for (f = 0; response.result.length > 0; f++) {
postData += '<div class="post">';
postData += '<a href="' + response.result[f].href + '" class="img" style="background-image:url("' + response.result[f].thumb + '")"></a>';
postData += '<div class="desc">';
postData += '<h2><a href="#">' + response.result[f].title + ' <span>' + response.result[f].fb_shares + '</span></a></h2>';
postData += '</div>';
postData += '</div>';
}
postData += '</div>';
document.getElementById(el).appendChild(postData);
}
});
}
}
答案 1 :(得分:1)
您忘了对数据进行分组:
var result = db.Users.Where(a => !a.isdelete)
.GroupBy(x => x.userid)
.Select(x => new User
{
userid = x.Key,
name = x.Last().Name,
datetime = x.OrderByDescending(a => a.datetime).First().datetime,
count = x.Count()
});
编辑:考虑到性能,这可能不是最佳的,因为对Last
和OrderByAscending
的调用都将迭代整个数据。为了克服这个问题,您可以稍微重新构造一下这个查询:
var result = db.Users.Where(a => !a.isdelete)
.GroupBy(x => x.userid)
.Select(x => new
{
user = x.OrderByDescending(a => a.datetime).First(),
count = x.Count()
})
.Select(x => new User {
name = x.user.name,
userid = x.user.userid,
datetime = x.user.datetime,
count = x.count
});