程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Linq 查詢 與方法調用,linq查詢方法調用

Linq 查詢 與方法調用,linq查詢方法調用

編輯:C#入門知識

Linq 查詢 與方法調用,linq查詢方法調用


 

通常,使用linq查詢時需要一個實現IQueryable<T> 的查詢對象

 public class DataA<T> : IQueryable<T> {....}

  

之後通過

 var q = from c in new DataA<int>() where c > 0 select new { a = c.ToString() };

  進行查詢,使用IQueryProvider  收集用戶輸入的表達式進行處理。

但是查詢本身實際上只關注查詢對象上有無可用的 linqmethod(Select,Where.....).

如下,定義一個泛型對象

public class Data<T> {
        public Data<TResult> Select< TResult>(   Expression<Func<T, TResult>> selector) {
            return new Data<TResult>();
        }
        public Data<T> Where (  Expression<Func<T,bool>> f) {
            return this;
        }
    }

只要保證Data上擁有與linq方法相同的實例方法,(Select,Where...),

我們依然可以使用相同的 linq 語法進行查詢:

var q = from c in new Data<int>() where c > 0 select new { a = c.ToString() };

 結論: linq 查詢語法與查詢對象的類型無關,只會檢查查詢對象上有無名稱、方法簽名一致的方法(實例方法或擴展方法)。

IQueryable,IQueryProvider 在linq查詢中不是必須的。

順便說一下 ,個人認為, orm中最好不要使用IQueryable 這些,容易造成方法污染, 而且linq查詢語法是固定的,無法擴展或限制。

Orm中最好直接使用 各種查詢方法,更加靈活一些。

 

 

 

 

 

   

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved