循环实体框架时如何检查数据

本文关键字:检查 数据 何检查 实体 框架 循环 | 更新日期: 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循环覆盖了标志变量