LINQ系列:Linq to Object轉換操作符

libingql發表於2014-10-22

  轉換是指將輸入物件的型別轉變為序列的動作。

1. AsEnumerable

  AsEnumerable操作符將查詢的輸入以IEnumberable(T)型別返回。

2. Cast

  Cast操作符將IEnumberable集合中的元素轉換為指定的型別,當Cast運算子無法將源型別轉換為目標型別時將丟擲InvalidCastException。

from T e in s            <=>            from e in s.Cast<T>()

1>. 原型定義

public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source);

2>. 示例

int[] fibonacci = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 };
foreach (int f in fibonacci.Cast<int>())
{
    Console.WriteLine(f);
}
var expr = from f in fibonacci.Cast<int>()
           select f;
var expr = from int f in fibonacci
           select f;
from Product p in products
select p

from p in products.Cast<Product>()

products.Cast<Product>()

3. OfType

  OfType操作符能夠實現基於一個特定的型別對IEnumberable物件的元素進行過濾,OfType會遍歷整個序列或集合,對全部元素進行過濾。

1>. 原型定義

public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source);

2>. 示例

ArrayList complex = new ArrayList();
complex.Add("LINQ to Object");
complex.Add(1);
complex.Add("LINQ to ADO.NET");
complex.Add(2);
complex.Add("LINW to XML");
complex.Add(3);

var expr = complex.OfType<int>();
foreach (var item in expr)
{
    Console.WriteLine(item);
}

4. ToArray

  ToArray操作符用於實現從一個IEnumberable序列建立一個陣列。

1>. 原型定義

public static TSource[] ToArray<TSource>(this IEnumerable<TSource> source);

2>. 示例

var expr = contex.Products
    .Select(p => p.ProductName)
    .ToArray();

foreach (var item in expr)
{
    Console.WriteLine(item);
}

5. ToDictionary

  ToDictionary操作符將序列中的所有返回元素插入到一個Dictionary(TKey, TValue)物件中。

1>. 原型定義

public static Dictionary<TKey, TElement> ToDictionary<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector);

2>. 示例

var expr = context.Provinces
    .ToDictionary(c => c.ProvinceID, c => c.ProvinceName);

foreach (var item in expr)
{
    Console.WriteLine("{0}-{1}", item.Key, item.Value);
}

6. ToList

  ToList操作符將一個IEnumberable序列集合轉換為一個List<T>物件。

var expr = from c in contex.Categories
            select new { c.CategoryID, c.CategoryName };
expr.ToList();

7. ToLookup

  ToLookup操作符基於一個特定的主鍵,將返回的元素放置到一個Lookup(TKey TElement)物件中。Lookup是主鍵的集合,其中每個主鍵都對映到一個或多個值上。Lookup物件是一個一對多的字典。

var expr = contex.Categories
    .ToLookup(c => c.CategoryID,c=> c.CategoryName );

foreach (var item in expr)
{
    Console.WriteLine(item.Key);

    foreach (var i in item)
    {
        Console.WriteLine(i);
    }
}

相關文章