ASP.NET 统计连续签到天数

ASP.NET 统计连续签到天数_第1张图片ASP.NET 统计连续签到天数_第2张图片

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;  
                    }  
                }  
            }  
        }  
    }  






你可能感兴趣的:(javascript,asp.net,web)