

CREATE TABLE tbl_Signin_SigninDays
(
SigninLogID int identity(1,1) primary key,
SigninUser varchar(100),
SigninTime datetime default(getdate()),
)
GO
truncate TABLE tbl_Signin_SigninDays
GO
insert into tbl_Signin_SigninDays
values('蜘蛛侠','2017-4-25 18:06:28'),('蜘蛛侠','2017-4-24 18:06:28'),('蜘蛛侠','2017-4-23 18:06:28'),('蜘蛛侠','2017-4-22 18:06:28'),('蜘蛛侠','2017-4-20 18:06:28'),('蜘蛛侠','2017-4-19 18:06:28'),
('闪电侠','2017-4-25 18:06:28'),('闪电侠','2017-4-23 18:06:28'),('闪电侠','2017-4-22 18:06:28'),('闪电侠','2017-4-20 18:06:28'),('闪电侠','2017-4-19 18:06:28'),
('绿箭侠','2017-4-25 18:06:28'),('绿箭侠','2017-4-24 18:06:28'),('绿箭侠','2017-4-22 18:06:28'),('绿箭侠','2017-4-21 18:06:28'),('绿箭侠','2017-4-19 18:06:28')
GO
select * from tbl_Signin_SigninDays order by SigninUser,SigninTime Desc
GO
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SigninDays.aspx.cs" Inherits="SasSystem.SigninDays" %>
连续签到天数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace SasSystem
{
public partial class SigninDays : System.Web.UI.Page
{
BusinessLogic.SigninDays signBL = new BusinessLogic.SigninDays();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.BindUser();
}
}
private void BindUser()
{
List _ulist = BusinessLogic.LambdaHelper.DistinctBy(signBL.SelectMany(), n => n.SigninUser).ToList();
this.dllUserList.DataSource = _ulist;
this.dllUserList.DataTextField = "SigninUser";
this.dllUserList.DataTextField = "SigninUser";
this.dllUserList.DataBind();
}
protected void btnGet_Click(object sender, EventArgs e)
{
List _list = signBL.SelectMany("SigninTime DESC", "SigninUser='" + this.dllUserList.SelectedValue + "'");
int SigninDays = 0;//连续签到天数
string _thisday = DateTime.Now.ToString("yyyy-MM-dd");//今日
foreach (var item in _list)
{
if (Convert.ToDateTime(item.SigninTime).ToString("yyyy-MM-dd").Equals(_thisday))//时间匹配上
{
SigninDays++;//签到天数+1天
}
else
{
break;//跳出循环
}
_thisday = Convert.ToDateTime(_thisday).AddDays(-1).ToString("yyyy-MM-dd");//每次循环往前倒推一天
}
this.ltrGetContext.Text = "[ " + this.dllUserList.SelectedValue + " ]连续签到天数:[ " + SigninDays + " ]";
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BusinessLogic
{
public static class LambdaHelper
{
// var query = people.DistinctBy(p => p.Id);
// var query = people.DistinctBy(p => new { p.Id, p.Name });
///
/// 去重复数据
///
///
///
///
/// 用于去重的表达式,单个字段如:var query = people.DistinctBy(p => p.Id);多个字段如:var query = people.DistinctBy(p => new { p.Id, p.Name });
///
public static IEnumerable DistinctBy(this IEnumerable source, Func keySelector)
{
HashSet seenKeys = new HashSet();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
}
}