04.Linq总结

  Linq语言查询,部分关键字使用:

a)    Distinct,值类型可以直接筛除,对于引用类型需要实现接口IEqualityComparer<T>。
b)    Select、SelectMany,SelectMany返回的委托是IEnumerable<T>。而Select返回委托是IEnumerable<IEnumerable<T>>。
c)    Where查询条件,进行筛选。
d)    ToDictionary、ToArray()、ToList(),转换成对应类型。
e)    First、FirstOrDefault、Last、LastOrDefault、Find、FindOrDefault。其中如果First、Last、根据查询条件没有找出来具体数据的话则会抛出异常,而对于FirstOrDefault、LastOrDefault则不会抛出异常。
f)    OrderBy、OrderByDescending、ThenOrderBy、ThenOrderByDescending。主要是做排序使用,可以多次连接进行排序,例如:OrderBy(p => p.id). OrderByDescending(p => p.name);
g)    list.GroupBy(a => new { a.Name, a.ID }).Select(p => new { p.Key.ID, p.Key.Name, count = p.Sum(a => a.ModifyBy) }) 。关于GroupBy使用可以在进行Select或者是其他操作。
h)    list.take(5),取前N条数据,如果列表当中没有指定数量的数据,那么有多少数据就取多少数据。

  对于引用类型Distinct筛选实现:

代码
public class EqualityComparer<T> : IEqualityComparer<T>
where T : class
{
private string Fileds { get; set; }

public EqualityComparer(string fileds)
{
Fileds
= fileds;
}

public bool Equals(T x, T y)
{
return GetHashCode(x) == GetHashCode(y);
}

public int GetHashCode(T obj)
{
try
{
return Convert.ToInt32(typeof(T).GetProperty(Fileds).GetValue(obj, null));
}
catch
{
throw new NotImplementedException();
}
}
}
对于引用类型Distinct使用:
Dictionary<int, AssessmentActivity> l1 = list.Distinct(new EqualityComparer<AssessmentActivity>("ID")).ToDictionary(p => p.ID);
posted @ 2011-02-08 13:00  13路易的  阅读(320)  评论(0编辑  收藏  举报