循环实体框架时如何检查数据
本文关键字:检查 数据 何检查 实体 框架 循环 | 更新日期: 2023-09-27 18:15:29
我使用实体框架,我有一个表。数据
Code Check Num
C1 true 10
C1 false 20
C2 true 15
C1 false 15
C1 true 15
C1 true 20
C2 false 10
好的,我将通过code = "C1"过滤数据,并找到Check = "true"和Num = "15"的行。我使用的代码如下:
var list = db.PRODUCTes.Where(e=>e.Code == C1);
var flag=0;
foreach (var item in list)
{
if (list.Select(e => e.Check).SingleOrDefault() == true && list.Select(e => e.Num).SingleOrDefault() == 15)
{
flag = 1;
}
else
flag = 2;
}
return flag;
运行时,flag的值为2。
为什么不使用Enumerable Any?Ref
var flag = db.PRODUCTes.Any(e => e.Code == C1 && e.Check && e.Num == 15) ? 1 : 2;
?是c#中的条件运算符。
之所以会发生这种情况,是因为您在检测到所需的值后继续迭代,从而将flag的值重置为2。你应该在找到
的值后中断if (list.Select(e => e.Check).SingleOrDefault() == true && list.Select(e => e.Num).SingleOrDefault() == 15)
{
flag = 1;
break;
}
如果我理解正确,你想检查你的列表中是否有任何项目检查'true'和num = '15'。您可以使用以下代码:
var list = db.PRODUCTes.Where(e=>e.Code == C1);
if(list.Any(e => e.Check == true && e.Num == "15"))
return 1;
return 2;
之前失败的原因是由于foreach循环覆盖了标志变量