使用LinQ實現對資料對象的查詢,linq實現資料對象

來源:互聯網
上載者:User

使用LinQ實現對資料對象的查詢,linq實現資料對象

        因為項目需要,接觸到了LinQ,經過一段時間的學習,對LinQ有了簡單的認識,本文就這個話題做個簡單的敘述。

        首先,應該寫出幾個問題,從宏觀上瞭解一下。LinQ是什嗎?為什麼使用LinQ?使用它有什麼好處?

         Language-integrated Query (LINQ)(Language Intergrated Query),是一組用於C#和vb語言的擴充,它允許編寫C#或者vb代碼以查詢資料庫相同的方式操作記憶體資料。----百度百科

        通俗點說,它就是查詢資料的。那麼為什麼要用它來查詢資料呢,使用它有什麼有點嗎?

        我們從稍微抽象一點的角度來考慮這個問題。物件導向的編程和資料訪問的割裂:一物件導向的語言和資料庫有兩套完全不相干的資料類型體系,程式設計語言中的string,在資料庫中就是varchar,這完全沒有統一性可言;二 SQL編碼體驗落後,我們編寫SQL的語句,沒有提示句,只有寫完了,才知道是否正確,客戶體驗度差;三各類查詢語言不一致,XML和資料庫都有各自的資料查詢體系,對象沒有自己的查詢體系。基於以上種種問題,LinQ出現了。

       組成上面也提到了,LinQ包括三類內容的查詢,對象,XML檔案和資料庫。對資料庫的查詢分為三個部分:

Linq to sql,

linq to DataSet,

linq to Entities。


        查詢方式:LinQ查詢資料有兩種方式,語言查詢和方法查詢。查詢語句實用類似於SQL語句的形式查詢,這種方式可讀性強,但是限制較多,對於多條件查詢很難實現。查詢方法方式:這種方式可讀性不強,但是可以實現很多複雜的查詢要求,因為我們可以將查詢條件單獨做一個方法去實現。通常情況,為了代碼的可讀性,我們首先應該考慮使用查詢語言方式,如果查詢語言難以實現,應該將查詢語言和查詢方法結合起來混編使用,這樣既最大化的實現了代碼可讀性,也增強了查詢功能。

 linq的幾種進階查詢方法:

彙總:Max,Min,Count,Sum等;

排序:ThenBy,OrderBy等;

分區:Take,Skip,TakeWhile,SkipWhile等;

集合:Distinct

產生:Range,Repeat

 

       下面是幾個LinQ查詢樣本:

         1基於語言、方法混編查詢的方式(linq to objects):

<span style="font-size:18px;">private void btnQuery_Click(object sender, EventArgs e)        {            //LinQ To Object 基本方法部分            //泛型集合資料 person            List<String> person = new List<String>();            person.Add("老 大");            person.Add("老 二");            person.Add("老 三");            person.Add("老 四");            person.Add("老 五");            person.Add("小 六");            person.Add("小 七");            person.Add("小 八");            ////輸出person 所有元素            //var result = from p in person select p;            //輸出person中所有以老開頭的人            //語句、方法混編模式,使用語句查詢,使用方法篩選            var result = (from p in person select p).Where(p => p.StartsWith("老"));            //列印            result.Print();        } public static void Print(this IEnumerable<String> ie)        {            //擷取可遍曆的介面            IEnumerator<String> result = ie.GetEnumerator();            while (result.MoveNext())            {                Console.WriteLine("\n------------------------\n");                Console.WriteLine(result.Current);                Console.WriteLine("\n------------------------\n");            }        } </span>

            這段代碼首先定義了一個泛型集合對象person,然後使用查詢語句和查詢費昂發混編模式查詢出以“老”開頭的人,然後列印出來。查詢語句不能完成所有的查詢功能,需要藉助查詢方法來篩選,本例中的查詢方法為系統提供。可以看出來,查詢語句可讀性強,但是功能不夠強大,查詢方法可讀性不強,功能比較多。

<span style="font-size:18px;">2 基於查詢方法模式(linq to objects)private void btnSelect_Click(object sender, EventArgs e)        {            //LinQ To Object 基本方法部分            //泛型集合資料 person            List<String> person = new List<String>();            person.Add("老 大");            person.Add("老 二");            person.Add("老 三");            person.Add("老 四");            person.Add("老 五");            person.Add("小 六");            person.Add("小 七");            person.Add("小 八");    //方法四 調用外部複雜方法作為查詢條件           var result = person.Where(p => Judge(p));}public bool Judge(String s)        {            if (s.StartsWith("老"))            {                return true;            }            else            {                return false;            }        } </span>
              本段代碼功能同上,完全使用查詢方法完成了篩選功能,這個方法不同於上例中的方法,此方法是重新定義的方法。
<span style="font-size:18px;">3 基於資料庫的查詢(LinQ to Entities)public ActionResult Index()        {//1 使用linq語句擷取實體資料//查詢條件中使用了lambda運算式List<Models.BlogArticle> list = (from b in db.BlogArticle where b.AIsDel ==false select b).ToList ();//2 使用viewdata擷取資料       ViewData["DataList"] = list;       // 3 載入視圖       list.Print();}  public partial class BlogArticle    {實體代碼:略     }</span>
<span style="background-color: rgb(255, 255, 255);">       </span><span style="background-color: rgb(255, 255, 255); font-family: Arial, Helvetica, sans-serif;"> </span>

本例中,我們只是將資料對象替換成了實體集合,基本文法相同。

優點:書寫簡單,容易上手。以對象的形式查詢資料,配合查詢語句和查詢方法的使用,是資料查詢更加直觀。

缺點:linq使用消極式載入功能,將待操作資料放入記憶體中,佔用了大量資源,造成資源浪費。


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.