Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# EF LINQ查询满足所有列表或数组的位置_C#_Linq_Entity Framework - Fatal编程技术网

C# EF LINQ查询满足所有列表或数组的位置

C# EF LINQ查询满足所有列表或数组的位置,c#,linq,entity-framework,C#,Linq,Entity Framework,我有这些数据: class MyTableItem { public long id { get; set; } public long listId { get; set; } public long listFieldValue { get; set; } public long parentId { get; set; } } 以及: 现在我需要知道哪些myData groupBy parrentId与我的条件匹配, 让我进一步解释: 我想知道哪个pa

我有这些数据:

class MyTableItem
{
    public long id { get; set; }
    public long listId { get; set; }
    public long listFieldValue { get; set; }
    public long parentId { get; set; }
}  
以及:

现在我需要知道哪些myData groupBy parrentId与我的条件匹配, 让我进一步解释:

我想知道哪个parrent Id具有listFieldValue,其中:

1 listId==1&&listFieldValue==100 和 2 listId==2&&listFieldValue>125 和 3 listId==3&&listFieldValue<175 和 4 listId==4&&listFieldValue>130&&listFieldValue<180


它必须返回1个Parentid。

好了。解释如下:

IEnumurable<MyTableItem> temp = myData ;
for (int i = 0; i < myMatchConditions.GetLength(0); i++)
{
    var conditionType = myMatchConditions[i,1];
    if (conditionType == 1)
    {
        temp = temp.Where(_ => _listFieldValue == myMatchConditions[i,2]);
    }
    else
    {
        if (conditionType == 2 || conditionType == 4)
        {

            temp = temp.Where(_ => _listFieldValue > myMatchConditions[i,2]);
        }

        if (conditionType == 3 || conditionType == 4)
        {
            temp = temp.Where(_ => _listFieldValue < myMatchConditions[i,3]);
        }
    }
}
我使用的是IEnumurable,这意味着它是Linq,而不是Linq到实体。我之所以选择它,是因为myData不是EF表,而是一个简单的数组。 我用for遍历所有的行,你可以用foreach来完成,我添加Where子句来过滤掉越来越多的内容,每次实际的过滤只有在你使用临时列表时才会发生 我在第二个单元格中添加了一个基于类型的条件,如果类型是4。。。我添加了2和3类型规则。。。这就形成了4型规则
您确定第一个条件是listId==1&&listFieldValue==100,而不是listId==1&&listFieldValue>100吗?@ekad是的,我有4个范围类型Equal,more,less,between,让我在问题中添加。thnks,让我检查一下。在开始测试之前,在rel中,我使用myData is EF table。这是一个例子,有什么变化吗?@mohammadadibi,是的。使用IQueryable而不是IEnumerable。这意味着将生成一个查询并将其发送到您的数据库。我如何在查询中使用它?我从MyDATA组的父级到MyDATA PARTEND的Q=Par在哪里?现在我的搜索条件只是ListFieldVald的一维数组,所以我使用:MyDATA PalTeD中的MyDATA组中的父变量Var=MyMatcPosits。
IEnumurable<MyTableItem> temp = myData ;
for (int i = 0; i < myMatchConditions.GetLength(0); i++)
{
    var conditionType = myMatchConditions[i,1];
    if (conditionType == 1)
    {
        temp = temp.Where(_ => _listFieldValue == myMatchConditions[i,2]);
    }
    else
    {
        if (conditionType == 2 || conditionType == 4)
        {

            temp = temp.Where(_ => _listFieldValue > myMatchConditions[i,2]);
        }

        if (conditionType == 3 || conditionType == 4)
        {
            temp = temp.Where(_ => _listFieldValue < myMatchConditions[i,3]);
        }
    }
}