using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.Text; using System.Collections.Generic; using System.Linq; [Serializable] [ SqlUserDefinedAggregate( Format.UserDefined, //use custom serialization to serialize the intermediate result IsInvariantToNulls = true, //optimizer property IsInvariantToDuplicates = false, //optimizer property IsInvariantToOrder = false, //optimizer property MaxByteSize = 8000) //maximum size in bytes of persisted value ] public struct joinStr: IBinarySerialize { private List<string> sbIntermediate; private string Spliter; /// <summary> /// 用户初始化 /// </summary> /// <param name="spliter"></param> public void Init() { sbIntermediate = new List<string>(); } /// <summary> /// 用来实现具体的聚合算法 /// </summary> /// <param name="Value"></param> public void Accumulate(SqlString Value,string spliter=",") { if (Value == null || Value.ToString().ToLower().Equals("null")) { return; } else { if (!sbIntermediate.Contains(Value.ToString())) { sbIntermediate.Add(Value.ToString()); } } this.Spliter = spliter; } /// <summary> /// 用来执行每一次的聚合逻辑顺序 /// </summary> /// <param name="Group"></param> public void Merge (joinStr Group) { for (int i = 0; i < Group.sbIntermediate.Count; i++) { if (!sbIntermediate.Contains(Group.sbIntermediate[i])) { sbIntermediate.Add(Group.sbIntermediate[i]); } } } /// <summary> /// 用来将聚合的结果返回 /// </summary> /// <returns></returns> public SqlString Terminate () { //string[] aa=sbIntermediate.OrderBy(a => a).ToArray(); string[] aa = sbIntermediate.ToArray(); Array.Sort(aa); return new SqlString(string.Join(this.Spliter, aa)); } // 这是占位符成员字段 public int _var1; #region IBinarySerialize Members public void Read(System.IO.BinaryReader r) { sbIntermediate = new List<string> { r.ReadString() }; } public void Write(System.IO.BinaryWriter w) { string[] aa = sbIntermediate.ToArray(); Array.Sort(aa); w.Write(string.Join(this.Spliter, aa)); } #endregion }
.net写sqlserver分组聚合函数
猜你喜欢
转载自blog.csdn.net/hutao1101175783/article/details/78790587
今日推荐
周排行