【发布时间】:2015-09-04 11:24:32
【问题描述】:
这是我的桌子:
瞳孔营养
Id PupilId NutritionId
1 10 100
2 10 101
我的另一张桌子营养:
Id Nutritioncategory BatchId NutritionRate NutritionId Operation
1 A 1 9000 100 1
2 B 1 5000 100 0
3 C 1 5000 100 1
4 D 2 6000 101 2
5 E 2 7000 101 2
6 F 2 8000 101 0
这是一个存储最终Rate的字段:
decimal Rate= 0;
案例 1:值为 0 且 Batch Id 为 1 的操作字段
Rate= Rate + NutritionRate(i.e 5000 because for batch id 1 with condition 0 only 1 record is there).
案例 2:现在用于值为 1 和 Batch Id 1 的操作字段
Here i want to sum up both the value i.e(10000 and 5000) but during addition if sum of both is greater than 10000 then just take 10000 else take sum like this:
if(9000 + 5000 > 10000)
Rate= 10000
else
Rate=Rate + (Addition of both if less than 10000).
案例 3:现在用于值为 0 和 Batch Id 2 的操作字段
Rate= Rate + NutritionRate(i.e 8000 because for batch id 1 with condition 0 only 1 record is there).
案例 4:现在用于值为 2 和 Batch Id 2 的操作字段
Here I will select Maximum value from Nutrition Rate field if there are 2 records:
Rate=Rate - (Maximum value from 6000 and 7000 so will take 7000).
我的班级文件:
public partial class PupilNutrition
{
public int Id { get; set; }
public int PupilId { get; set; }
public int NutritionId { get; set; }
}
public partial class Nutrition
{
public int Id { get; set; }
public string Nutritioncategory { get; set; }
public decimal NutritionRate { get; set; }
public Nullable<int> NutritionId { get; set; }
}
这就是我所做的:
batchId=1 or 2;//
List<int> NutritionId = db.PupilNutrition.Where(x => PupilId == 10).Select(c => c.NutritionId).ToList(); //output 100,101
var data = db.Nutrition.Where(x => x.BatchId == batchId && NutritionId.Contains(x.NutritionId.Value)).ToList();
我试过这样,但这是一个劳动过程:
var data1=data.where(t=>t.Operation==0);
Rate= Rate + data1.Sum(p => p.NutritionRate);
同样适用于操作 1:
var data2=data.where(t=>t.Operation==1);
This is left because here i need to sum up 2 value if two records are there as shown in my above cases and if sum is greater than 10000 than select 10000 else select sum.
对于操作 2 也是如此:
var data3=data.where(t=>t.Operation==2);
Rate= Rate - data3.Max(p => p.NutritionRate);
我认为我已经完成了一个劳动过程,因为这甚至可以通过我猜的 linq 查询以更好的方式完成。
那么任何人都可以帮助我简化 linq 查询中的整个过程,甚至是一些更好的方法,并为剩下的 Operation Value 2 提供解决方案吗?
【问题讨论】:
-
请澄清 - 你想要 4 个不同的结果,还是一个结果,即 case1+case2+case3+case4 ?
-
@Rob:最终结果如下:案例1(利率)+案例2(利率)+案例3(利率)。只有3个条件是0,1,2跨度>
标签: c# asp.net-mvc performance linq