走進Linq-Linq大觀園

作者: 橫刀天笑  來源: 博客園  發布時間: 2008-09-23 12:02  閱讀: 24982 次  推薦: 5   原文鏈接   [收藏]  
 

系列文章導航:

走進Linq--Linq橫空出世篇

走進Linq-輝煌的背后

走進Linq-Linq大觀園

不能不說的C#特性-對象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴展方法

不能不說的C#特性-匿名方法和Lambda表達式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產品

不能不說的C#特性-迭代器(下),yield以及流的延遲計算

走進Linq-Linq to Objects(上)基礎篇

走進Linq-Linq to Objects(下)實例篇

走進Linq-Linq to SQL感性認識篇

走進Linq-Linq to SQL How do I(1)

走進Linq-Linq to SQL How do I(2)

走進Linq-Linq to SQL How do I(3)

走進Linq-How do I(4)拾遺補零篇第一節

走進Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進Linq-Linq to SQL源代碼賞析之Provider的初始化

走進Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq

 

文章發布后大家有些人叫做,心里竊喜,不過壓力也大增,我很想按照簡潔明快的文風寫下去,不過講技術的文章很難不落于沉悶,所以我努力了。(題外話:這幾天猛看幽默小說,想把文字寫的幽默一點,開個玩笑,呵呵)

經過幾天的閉關編程大師又有了一些新的覺悟了,不管對DSL還是命令式編程和函數式編程都有了新的理解。如是他又接著了漫長的云游。第一站當然就是那個曾經讓他結下心結的那個剛畢業的coder。

大師:“嘿,這幾日可好,還在發牢騷么?”

Coder:“不了,正好你來了,讓你看看我的程序”,Coder將他的電腦屏幕轉向大師,期盼的眼神表明他急切的期望得到大師的夸獎。

如是大師看到了如下一些代碼:

/// 
    /// 一個通用的泛型委托,代表接受一個參數并有一個返回值的方法
    
/// 
    /// 輸入參數類型
    /// 返回值類型
    /// 輸入參數
    /// 返回值
    public delegate TOutput MyDelegate<TInput,TOutput>(TInput input);
    
/// 
    /// 這個類是包含有對IEnumerable接口的一系列擴展方法
    
/// 因為在.net里所有的集合類都實現了IEnumerable接口
    
/// 所以對該接口的擴展將擴散到所有集合
    
/// 
    public static class Extension
    {
        
public static IEnumerable<TInput> Where<TInput>(this IEnumerable<TInput> self, MyDelegate<TInput, bool> filter)
        {
            
foreach (TInput item in self)
                
if (filter(item))
                    
yield return item;
        }
        
public static IEnumerable<TOutput> Select<TInput, TOutput>(this IEnumerable<TInput> self, MyDelegate<TInput, TOutput> selector)
        { 
            
foreach(TInput item in self)
                
yield return selector(item);
        }
       
//下面有更多的SQL風格的移植
}

下面是我做的個小測試代碼:

public class Program
{
        
public static void Main()
        {
            IList books = 
new List { 
             
new Book { Title = "Inside COM", ISBN = "123-456-789",Price=20 },
             
new Book { Title = "Inside C#", ISBN = "123-356-d89",Price=100 },
             
new Book { Title = "Linq", ISBN = "123-d56-d89", Price = 120 }
            };

            var result = books.Where(book => book.Title == 
"Linq").Select(book => new { 
                Key = book.Title,Value=book.Price
            });
        }
}
5
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()