去重,以List中某元素为基准,去除次元素相同的记录
List<MouldDMDXInfo> listBM_Distinct = listAllMouldBM.Where((m, i) => listAllMouldBM.FindIndex(z => z.MouldNo == m.MouldNo) == i).ToList(); //去除MouldNo相同的记录
以List中某元素为查询条件,判断List中是否存在数据
list.Exists(x => x.NGTYPE == 1); //判断List是否存在NGTYPE为1的元素
List进行sum或者其他运算,剔除值中为null的数据
var cycleDay = list.Where(u => u.CropTypeId ==typeId).Select(p => p.CycleDay).DefaultIfEmpty().Sum();
var cycleDay = list.Where(u => u.CropTypeId == typeId).Sum(p => (p.CycleDay == null ? 0 : p.CycleDay));
DataTable中使用Select()方法找出interval最大的那条数据
DataRow[] oTmp = dt.Select("interval = max(interval)");
DataTable中Select()方法筛选不等于某条件的数据(使用"<>",不能使用“!=”,会报错)
DataRow[] drs = dt.Select(string.Format(" type<> '{0}' ","2"));
以某字段为查询条件,查询DataTable中符合条件的数据
DataRow[] drs = dt.AsEnumerable().Where<DataRow>(m => m["name"].Equals("小明")).ToArray(); //找出DataTable中name为小明的数据
查询DataRow[]中某列的值,取DataRow中第一个值
var unloadtime = drs.AsEnumerable().Select(t => t.Field<string>("unloadtime")).FirstOrDefault().ToString();
数组中以多个字段分组,再以某字段升序排序,再取第一个(以MODEL,PATTERN分组,再以ACCEPTTIME升序排序)
var arrFlowData = arrMESFlowData.AsEnumerable().GroupBy(t => new { t.MODEL, t.PATTERN }).Select(t => t.OrderBy(x => x.ACCEPTTIME).FirstOrDefault());
List中以Hours降序,再以DssCode升序排序(先按Hours降序,如果Hours相同再按DssCode升序。如果Hours为null或者为空,排序会出现混乱,待解决 O(≧口≦)O)
List<DMDXMould> list = dmdxDetail.listMouldLoad.OrderByDescending(t => t.Hours).ThenBy(t => t.DssCode).ToList();
从DataTable中取出某列的值并返回一个List<int>集合
var list =dt.AsEnumerable().Select<DataRow, int>(x => Convert.ToInt32(x["列名"])).ToList<int>();
DataTable使用Where筛选并排序(根据no和code筛选,再根据date和time降序排序)
DataRow[] drs = dt.AsEnumerable().Where<DataRow>(t => t["no"].Equals("FU123456") && t["code"].Equals("LFMJ03")).OrderByDescending(t => t["date"]).ThenByDescending(t => t["time"]).ToArray();
分组
// 实现多key分组的扩展函数版本
var sums = empList
.GroupBy(x => new { x.Age, x.Sex })
.Select(group => new {
Peo = group.Key, Count = group.Count()
});
foreach (var employee in sums) {
Console.WriteLine(employee.Count + ": " + employee.Peo);
}
// 实现多key分组的lambda版本
var sums2 = from emp in empList
group emp by new { emp.Age, emp.Sex } into g
select new { Peo = g.Key, Count = g.Count() };
foreach (var employee in sums) {
Console.WriteLine(employee.Count + ": " + employee.Peo);
}
//充分利用了匿名类型
varListByOwner= list.GroupBy(l => l.Owner)
.Select(lg =>
new{
Owner= lg.Key,
Boxes= lg.Count(),
TotalWeight= lg.Sum(w => w.Weight),
TotalVolume= lg.Sum(w => w.Volume)
});
var q =from b in listOfBoxes
group b by b.Ownerinto g
selectnew
{
Owner= g.Key,
Boxes= g.Count(),
TotalWeight= g.Sum(item => item.Weight),
TotalVolume= g.Sum(item => item.Volume)
};
连接查询
//Linq实现左连接
DataClasses1DataContext db = new DataClasses1DataContext();
var leftJoinSql = from student in db.Student
join book in db.Book on student.ID equals book.StudentID into temp
from tt in temp.DefaultIfEmpty()
select new
{
sname= student.Name,
bname = tt==null?"":tt.Name//这里主要第二个集合有可能为空。需要判断
};
//Linq实现右连接
DataClasses1DataContext db=new DataClasses1DataContext();
var rightJoinSql = from book in db.Book
join stu in db.Student on book.StudentID equals stu.ID into joinTemp
from tmp in joinTemp.DefaultIfEmpty()
select new {
sname=tmp==null?"":tmp.Name,
bname=book.Name
};