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]);
}
}
}