Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环实体框架时如何检查数据?_C#_Entity Framework_Foreach - Fatal编程技术网

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

C# 循环实体框架时如何检查数据?,c#,entity-framework,foreach,C#,Entity Framework,Foreach,我使用实体框架,我有一个表。数据是 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.PRODUCT

我使用实体框架,我有一个表。数据是

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。我认为它不起作用。

之所以发生这种情况,是因为您在检测到想要的值后继续迭代,导致将flag的值重置为2。您应该在找到值后中断:

if (list.Select(e => e.Check).SingleOrDefault() == true && list.Select(e => e.Num).SingleOrDefault() == 15)
{
    flag = 1;
    break;
}

之所以会发生这种情况,是因为您在检测到想要的值后继续迭代,从而将flag的值重置为2。您应该在找到值后中断:

if (list.Select(e => e.Check).SingleOrDefault() == true && list.Select(e => e.Num).SingleOrDefault() == 15)
{
    flag = 1;
    break;
}

为什么不使用可枚举的


那个?是C#中的条件运算符。了解它。

为什么不使用可枚举的Any


那个?是C#中的条件运算符。请阅读相关内容。

如果我理解正确,您希望检查您的列表中是否有任何项目已选中“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循环,您覆盖了flag变量。

如果我理解正确,您希望检查列表中是否有任何项具有check'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循环覆盖了flag变量。

我怀疑您的代码在
.SingleOrDefault()
中是否会引发异常。您的
列表。Select(e=>e.Check)
肯定有多个项,因此
SingleOrDefault
将引发异常。奇怪的是,你没有例外?下次在描述你所做的事情时请诚实,在运行它时听到这个消息是很可笑的,flag的值是2,与你发布的内容一致。你为什么使用foreach循环?我这样问是因为我在任何地方都没有看到“item”…我怀疑您的代码在
.SingleOrDefault()
中是否会抛出异常。您的
列表。Select(e=>e.Check)
肯定有多个项,因此
SingleOrDefault
将引发异常。奇怪的是,你没有例外?下次在描述你所做的事情时请诚实,在运行它时听到这个消息是很可笑的,flag的值是2,与你发布的内容一致。你为什么使用foreach循环?我这么问是因为我没有在任何地方看到“物品”。。。