ASP.NET 统计连续签到天数

来源:互联网 发布:电脑抽奖软件下载 编辑:程序博客网 时间:2024/06/06 20:01

CREATE TABLE tbl_Signin_SigninDays(    SigninLogID int identity(1,1) primary key,SigninUser varchar(100),SigninTime datetime default(getdate()),)GOtruncate TABLE tbl_Signin_SigninDaysGOinsert into tbl_Signin_SigninDaysvalues('蜘蛛侠','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')GOselect * from tbl_Signin_SigninDays order by SigninUser,SigninTime DescGO
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SigninDays.aspx.cs" Inherits="SasSystem.SigninDays" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>连续签到天数</title>    <script src="/js/ajax.AutocompleteTable/jquery-1.8.3.min.js"></script></head><body>    <form id="form1" runat="server">        <asp:DropDownList ID="dllUserList" runat="server"></asp:DropDownList>        <asp:Button ID="btnGet" runat="server" Text="Button" OnClick="btnGet_Click" />        <br />        <asp:Literal ID="ltrGetContext" runat="server"></asp:Literal>    </form></body></html>

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<Model.SigninDaysInfo> _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<Model.SigninDaysInfo> _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 });              /// <summary>              /// 去重复数据              /// </summary>              /// <typeparam name="TSource"></typeparam>              /// <typeparam name="TKey"></typeparam>              /// <param name="source"></param>              /// <param name="keySelector">用于去重的表达式,单个字段如:var query = people.DistinctBy(p => p.Id);多个字段如:var query = people.DistinctBy(p => new { p.Id, p.Name });</param>              /// <returns></returns>              public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)              {                  HashSet<TKey> seenKeys = new HashSet<TKey>();                  foreach (TSource element in source)                  {                      if (seenKeys.Add(keySelector(element)))                      {                          yield return element;                      }                  }              }          }      }  






0 0
原创粉丝点击