优化 LINQ to SQL 写法:提升性能和可读性
优化linq to sql写法:\n1. 将多个join操作简化为一个join操作,并使用关联的导航属性进行关联查询。\n2. 将多个where条件合并为一个where条件。\n3. 使用枚举类型的ToString方法替代字符串比较。\n4. 将重复的查询条件提取出来,避免重复写入。\n5. 将查询结果的排序操作提取到最后一步。\n6. 使用var关键字简化变量声明。\n\n优化后的代码如下:\n\nvar q1 = from a in GetIQueryable()\n join b in Db.GetIQueryable<Equipment_Info>() on a.EquipmentId equals b.Id\n join c in Db.GetIQueryable<Equipment_Type>() on b.EquipmentTypeId equals c.Id\n join d in Db.GetIQueryable<Equipment_UsageAreaType>() on b.EquipmentUsageAreaTypeId equals d.Id\n join e in Db.GetIQueryable<Equipment_UseType>() on b.EquipmentUseTypeId equals e.Id\n where !a.Deleted && b.EnterpriseId == enterpriseId\n && b.IsEnable && !b.Deleted\n && c.IsEnable && !c.Deleted\n && d.IsEnable && !d.Deleted\n && e.IsEnable && !e.Deleted\n && a.RecordTime >= startTime && a.RecordTime <= endTime\n && c.TypeName == EquipmentType.电表.ToString()\n select new\n {\n a.RecordTime,\n a.ThisPower,\n EquipmentID = b.Id,\n b.EquipmentName,\n TypeID = c.Id,\n c.TypeName,\n UsageAreaTypeID = d.Id,\n d.UsageAreaName,\n UseTypeID = e.Id,\n e.UseTypeName,\n e.Sort\n };\n\nvar q2 = q1.Where(p => p.TypeName == EquipmentType.电表.ToString()\n && p.UseTypeName == EquipmentUseType.总用电.ToString()\n && p.ThisPower > 0);\n\nvar q4 = q1.Where(p => p.TypeName == EquipmentType.电表.ToString()\n && p.UseTypeName == EquipmentUseType.使用发电.ToString()\n && p.ThisPower > 0);\n\nvar q3 = q1.Where(p => p.UseTypeName == EquipmentUseType.区域用电.ToString()\n && p.ThisPower > 0)\n .OrderBy(p => p.Sort);
原文地址: https://www.cveoy.top/t/topic/pqVJ 著作权归作者所有。请勿转载和采集!