[c#]asp.ent下開發(fā)中Tag的開發(fā)技巧
更新時(shí)間:2007年05月28日 00:00:00 作者:
網(wǎng)站開發(fā)常用關(guān)鍵字(tag),一般需要獲得最多的被采用的Tag,也就是流行詞。
通常思路是將關(guān)鍵字tag保存到單獨(dú)表中,然后在其他表中根據(jù)一組id進(jìn)行對多個(gè)關(guān)鍵字進(jìn)行標(biāo)識。因?yàn)橐粋€(gè)文章可以選擇多個(gè)tag,查詢的時(shí)候頗為麻煩。
所以我在開發(fā)中利用了這樣的方法,當(dāng)然不見得多高明 :),分享下經(jīng)驗(yàn)。
將tag直接保存在文章的表中,如Tag字段,tag為“c#”和“.net”,則Tag字段值為“c#/.net”就是依/符號分割tag,這樣數(shù)據(jù)庫中保存的是字符串了。單文章顯示的時(shí)候可以直接分割成數(shù)組顯示,減少表的關(guān)聯(lián),提高了效率。
當(dāng)需要顯示最近流行詞的時(shí)候。
查詢所有的tag
select tag from 表
利用DataReader把輸出結(jié)果相加起來。然后根據(jù)分隔符轉(zhuǎn)化為字符串,剩下的就是對字符串進(jìn)行排序,根據(jù)tag重多少進(jìn)行。并返回重復(fù)的數(shù)量,見代碼。為方便查看,我都寫在了一個(gè)aspx頁面中了。
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="XXXX.BLL" %>
<%@ Import Namespace="XXXX.Model" %>
<%@ Import Namespace="XXXX.DBUtility" %>
<script runat="server">
protected string stext;
protected void Page_Load(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
using (System.Data.SqlClient.SqlDataReader rd = XXXX.DBUtility.SqlHelper.ExecuteReader(SqlHelper.ConnectionString, System.Data.CommandType.Text, "Select Kinds + '/' FROM XXX", null))
{
while (rd.Read())
{
sb.Append(rd.GetString(0));
}
}
stext = sb.ToString();
ToArrayBySort(ToArray(stext, '/'));
}
/// <summary>
/// 將字符串根據(jù)分隔符轉(zhuǎn)化為數(shù)組
/// </summary>
/// <param name="sourcestring">要轉(zhuǎn)化的字符串</param>
/// <param name="compart">分隔符</param>
/// <returns></returns>
public ArrayList ToArray(string sourcestring, char split)
{
CharEnumerator ce = sourcestring.GetEnumerator();
StringBuilder sb = new StringBuilder();
ArrayList slist = new ArrayList();
while (ce.MoveNext())
{
if (ce.Current != split)
{
sb.Append(ce.Current);
}
else
{
if (string.Empty == sb.ToString()) continue;
slist.Add(sb.ToString());
sb.Remove(0, sb.ToString().Length);
}
}
return slist;
}
public class myComparer : IComparer
{
int IComparer.Compare(Object x, Object y)
{
return ((new CaseInsensitiveComparer()).Compare(((SortItem)y).Count, ((SortItem)x).Count));
}
}
public class SortItem
{
private string itemname;
private int count;
public SortItem()
{
}
public string ItemName
{
get { return itemname; }
set { itemname = value; }
}
public int Count
{
get { return count; }
set { count = value; }
}
}
public System.Collections.Generic.IList<SortItem> ToArrayBySort(ArrayList slist)
{
slist.Sort();
ArrayList sortList = new ArrayList();
foreach (object obj in slist)
{
SortItem sItem = new SortItem();
sItem.ItemName = obj.ToString();
sItem.Count = 1;
if (sortList.Count == 0) { sortList.Add(sItem); continue; }
if (obj.ToString() == ((SortItem)sortList[sortList.Count - 1]).ItemName)
{
sItem.Count = ((SortItem)sortList[sortList.Count - 1]).Count + 1;
sortList.RemoveAt(sortList.Count - 1);
}
sortList.Add(sItem);
}
myComparer myCm = new myComparer();
sortList.Sort(myCm);
System.Collections.Generic.IList<SortItem> iList = new System.Collections.Generic.List<SortItem>();
foreach (object obj in sortList)
{
iList.Add((SortItem)obj);
//Response.Write(((SortItem)obj).ItemName + "-" + ((SortItem)obj).Count.ToString() + "<br />");
}
return iList;
}
</script>
通常思路是將關(guān)鍵字tag保存到單獨(dú)表中,然后在其他表中根據(jù)一組id進(jìn)行對多個(gè)關(guān)鍵字進(jìn)行標(biāo)識。因?yàn)橐粋€(gè)文章可以選擇多個(gè)tag,查詢的時(shí)候頗為麻煩。
所以我在開發(fā)中利用了這樣的方法,當(dāng)然不見得多高明 :),分享下經(jīng)驗(yàn)。
將tag直接保存在文章的表中,如Tag字段,tag為“c#”和“.net”,則Tag字段值為“c#/.net”就是依/符號分割tag,這樣數(shù)據(jù)庫中保存的是字符串了。單文章顯示的時(shí)候可以直接分割成數(shù)組顯示,減少表的關(guān)聯(lián),提高了效率。
當(dāng)需要顯示最近流行詞的時(shí)候。
查詢所有的tag
select tag from 表
利用DataReader把輸出結(jié)果相加起來。然后根據(jù)分隔符轉(zhuǎn)化為字符串,剩下的就是對字符串進(jìn)行排序,根據(jù)tag重多少進(jìn)行。并返回重復(fù)的數(shù)量,見代碼。為方便查看,我都寫在了一個(gè)aspx頁面中了。
復(fù)制代碼 代碼如下:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="XXXX.BLL" %>
<%@ Import Namespace="XXXX.Model" %>
<%@ Import Namespace="XXXX.DBUtility" %>
<script runat="server">
protected string stext;
protected void Page_Load(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
using (System.Data.SqlClient.SqlDataReader rd = XXXX.DBUtility.SqlHelper.ExecuteReader(SqlHelper.ConnectionString, System.Data.CommandType.Text, "Select Kinds + '/' FROM XXX", null))
{
while (rd.Read())
{
sb.Append(rd.GetString(0));
}
}
stext = sb.ToString();
ToArrayBySort(ToArray(stext, '/'));
}
/// <summary>
/// 將字符串根據(jù)分隔符轉(zhuǎn)化為數(shù)組
/// </summary>
/// <param name="sourcestring">要轉(zhuǎn)化的字符串</param>
/// <param name="compart">分隔符</param>
/// <returns></returns>
public ArrayList ToArray(string sourcestring, char split)
{
CharEnumerator ce = sourcestring.GetEnumerator();
StringBuilder sb = new StringBuilder();
ArrayList slist = new ArrayList();
while (ce.MoveNext())
{
if (ce.Current != split)
{
sb.Append(ce.Current);
}
else
{
if (string.Empty == sb.ToString()) continue;
slist.Add(sb.ToString());
sb.Remove(0, sb.ToString().Length);
}
}
return slist;
}
public class myComparer : IComparer
{
int IComparer.Compare(Object x, Object y)
{
return ((new CaseInsensitiveComparer()).Compare(((SortItem)y).Count, ((SortItem)x).Count));
}
}
public class SortItem
{
private string itemname;
private int count;
public SortItem()
{
}
public string ItemName
{
get { return itemname; }
set { itemname = value; }
}
public int Count
{
get { return count; }
set { count = value; }
}
}
public System.Collections.Generic.IList<SortItem> ToArrayBySort(ArrayList slist)
{
slist.Sort();
ArrayList sortList = new ArrayList();
foreach (object obj in slist)
{
SortItem sItem = new SortItem();
sItem.ItemName = obj.ToString();
sItem.Count = 1;
if (sortList.Count == 0) { sortList.Add(sItem); continue; }
if (obj.ToString() == ((SortItem)sortList[sortList.Count - 1]).ItemName)
{
sItem.Count = ((SortItem)sortList[sortList.Count - 1]).Count + 1;
sortList.RemoveAt(sortList.Count - 1);
}
sortList.Add(sItem);
}
myComparer myCm = new myComparer();
sortList.Sort(myCm);
System.Collections.Generic.IList<SortItem> iList = new System.Collections.Generic.List<SortItem>();
foreach (object obj in sortList)
{
iList.Add((SortItem)obj);
//Response.Write(((SortItem)obj).ItemName + "-" + ((SortItem)obj).Count.ToString() + "<br />");
}
return iList;
}
</script>
相關(guān)文章
ASP.NET實(shí)現(xiàn)讀取Excel內(nèi)容并在Web上顯示
這篇文章主要介紹了ASP.NET實(shí)現(xiàn)讀取Excel內(nèi)容并在Web上顯示,很實(shí)用的一個(gè)技巧,需要的朋友可以參考下2014-08-08asp.net 獲取系統(tǒng)中參數(shù)的實(shí)現(xiàn)代碼
asp.net 獲取系統(tǒng)中參數(shù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-12-12Entity?Framework?Core種子數(shù)據(jù)Data-Seeding
這篇文章介紹了Entity?Framework?Core種子數(shù)據(jù)Data-Seeding的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03.Net Core配置Configuration具體實(shí)現(xiàn)
這篇文章主要介紹了.Net Core配置Configuration具體實(shí)現(xiàn),文中運(yùn)用大量代碼進(jìn)行講解,如果有對相關(guān)知識感興趣的小伙伴可以參考這篇文章,希望可以幫助到你2021-09-09ASP.NET Core 2.0 帶初始參數(shù)的中間件問題及解決方法
這篇文章主要介紹了ASP.NET Core 2.0 帶初始參數(shù)的中間件問題及解決方法,需要的朋友可以參考下2017-10-10Asp.Net生成靜態(tài)頁面的實(shí)現(xiàn)方法
這篇文章介紹了Asp.Net生成靜態(tài)頁面的實(shí)現(xiàn)方法,有需要的朋友可以參考一下2013-10-10.net Core 使用IHttpClientFactory請求實(shí)現(xiàn)
這篇文章主要介紹了.net Core 使用IHttpClientFactory請求實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01