C# 通过Linq查询循环

C# 通过Linq查询循环,c#,linq,odata,C#,Linq,Odata,我有一个linq查询,它从odata服务中提取数据,如下所示: var Query = from t in results.People where t.Invalid == false && t.Id == 148 select new { t.Name, t.Location } 我还有一个Id{148149150…}的字符串数组,我想用数组中的每个Id替换上面的t.Id==148表达式 我不知道它的语法是怎样的,如果没有for循环也

我有一个linq查询,它从odata服务中提取数据,如下所示:

var Query = from t in results.People
   where t.Invalid == false && t.Id == 148
   select new
   {
    t.Name,
    t.Location
   }
我还有一个Id{148149150…}的字符串数组,我想用数组中的每个Id替换上面的
t.Id==148
表达式

我不知道它的语法是怎样的,如果没有for循环也是可能的话。 有人能告诉我这是否可行吗?

对于OData,您可以尝试:

var Query = from t in results.People
            from r in ids
            where t.Invalid == false && t.Id = r
            select new
            {
                t.Name,
                t.Location
            };
这将返回数组中具有匹配ID的所有行
ids

对于LINQ到对象或LINQ到SQL/实体框架,查询通常为:

var Query = from t in results.People
   where t.Invalid == false && ids.Contains(t.Id)
   select new
   {
    t.Name,
    t.Location
   };
对于OData,您可以尝试:

var Query = from t in results.People
            from r in ids
            where t.Invalid == false && t.Id = r
            select new
            {
                t.Name,
                t.Location
            };
这将返回数组中具有匹配ID的所有行
ids

对于LINQ到对象或LINQ到SQL/实体框架,查询通常为:

var Query = from t in results.People
   where t.Invalid == false && ids.Contains(t.Id)
   select new
   {
    t.Name,
    t.Location
   };
对于OData,您可以尝试:

var Query = from t in results.People
            from r in ids
            where t.Invalid == false && t.Id = r
            select new
            {
                t.Name,
                t.Location
            };
这将返回数组中具有匹配ID的所有行
ids

对于LINQ到对象或LINQ到SQL/实体框架,查询通常为:

var Query = from t in results.People
   where t.Invalid == false && ids.Contains(t.Id)
   select new
   {
    t.Name,
    t.Location
   };
对于OData,您可以尝试:

var Query = from t in results.People
            from r in ids
            where t.Invalid == false && t.Id = r
            select new
            {
                t.Name,
                t.Location
            };
这将返回数组中具有匹配ID的所有行
ids

对于LINQ到对象或LINQ到SQL/实体框架,查询通常为:

var Query = from t in results.People
   where t.Invalid == false && ids.Contains(t.Id)
   select new
   {
    t.Name,
    t.Location
   };

如果OData不支持contains,那么contains呢

from t in results.People
where t.Invalid == false && ids.Any(id => id == t.Id)
select new
{
    t.Name,
    t.Location
};

如果OData不支持contains,那么contains呢

from t in results.People
where t.Invalid == false && ids.Any(id => id == t.Id)
select new
{
    t.Name,
    t.Location
};

如果OData不支持contains,那么contains呢

from t in results.People
where t.Invalid == false && ids.Any(id => id == t.Id)
select new
{
    t.Name,
    t.Location
};

如果OData不支持contains,那么contains呢

from t in results.People
where t.Invalid == false && ids.Any(id => id == t.Id)
select new
{
    t.Name,
    t.Location
};


我不相信OData支持包含。正确。我获取
无法从'long[]转换为'System.Linq.IQueryable
。但是有没有一种方法可以创建一个动态字符串,看起来像这样的
t.Id==148 | | t.Id==149
等等?对于数组中的所有值?嗯,现在我得到的是
方法“Select”不受支持。
当尝试像这样迭代查询变量时
foreach(查询中的变量detail){name=detail.name;location=detail.location;}
@sd\u dracula,您可以尝试几件事吗。首先创建一个临时类,然后投影到它的属性,比如
selectnewmyclass{Name=t.Name,Location=t.Location}
而不是匿名类型。我相信这应该是可行的,您也可以尝试使用匿名类型显式指定字段名,如
select new{Name=t.Name,Location=t.Location}
我通过类也收到了类似的错误:
{将Linq表达式转换为URI时出错:不支持方法“select”。}
我认为OData不支持contains.Correct。我获取
无法从'long[]转换为'System.Linq.IQueryable
。但是有没有一种方法可以创建一个动态字符串,看起来像这样的
t.Id==148 | | t.Id==149
等等?对于数组中的所有值?嗯,现在我得到的是
方法“Select”不受支持。
当尝试像这样迭代查询变量时
foreach(查询中的变量detail){name=detail.name;location=detail.location;}
@sd\u dracula,您可以尝试几件事吗。首先创建一个临时类,然后投影到它的属性,比如
selectnewmyclass{Name=t.Name,Location=t.Location}
而不是匿名类型。我相信这应该是可行的,您也可以尝试使用匿名类型显式指定字段名,如
select new{Name=t.Name,Location=t.Location}
我通过类也收到了类似的错误:
{将Linq表达式转换为URI时出错:不支持方法“select”。}
我认为OData不支持contains.Correct。我获取
无法从'long[]转换为'System.Linq.IQueryable
。但是有没有一种方法可以创建一个动态字符串,看起来像这样的
t.Id==148 | | t.Id==149
等等?对于数组中的所有值?嗯,现在我得到的是
方法“Select”不受支持。
当尝试像这样迭代查询变量时
foreach(查询中的变量detail){name=detail.name;location=detail.location;}
@sd\u dracula,您可以尝试几件事吗。首先创建一个临时类,然后投影到它的属性,比如
selectnewmyclass{Name=t.Name,Location=t.Location}
而不是匿名类型。我相信这应该是可行的,您也可以尝试使用匿名类型显式指定字段名,如
select new{Name=t.Name,Location=t.Location}
我通过类也收到了类似的错误:
{将Linq表达式转换为URI时出错:不支持方法“select”。}
我认为OData不支持contains.Correct。我获取
无法从'long[]转换为'System.Linq.IQueryable
。但是有没有一种方法可以创建一个动态字符串,看起来像这样的
t.Id==148 | | t.Id==149
等等?对于数组中的所有值?嗯,现在我得到的是
方法“Select”不受支持。
当尝试像这样迭代查询变量时
foreach(查询中的变量detail){name=detail.name;location=detail.location;}
@sd\u dracula,您可以尝试几件事吗。首先创建一个临时类,然后投影到它的属性,比如
selectnewmyclass{Name=t.Name,Location=t.Location}
而不是匿名类型。我相信这应该是可行的,您也可以尝试使用匿名类型显式指定字段名,如
select new{Name=t.Name,Location=t.Location}
我通过该类也收到了类似的错误:
{将Linq表达式转换为URI时出错:不支持方法“select”。}
您的列表很大吗?你可以看到这个答案,它不是很大,大约30个条目左右。然后转到我上面链接的答案,用连接的$filter答案将它发送到odata服务器。你的列表大吗?你可以看到这个答案,它不是很大,大约30个条目左右。然后转到我上面链接的答案,用连接的$filter答案将它发送到odata服务器。你的列表大吗?你可以看到这个答案,它不是很大,大约30个条目左右。然后转到我上面链接的答案