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筛选实现:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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();
}
}
}
Dictionary<int, AssessmentActivity> l1 = list.Distinct(new EqualityComparer<AssessmentActivity>("ID")).ToDictionary(p => p.ID);