C# 如何在不使用ToList的情况下对OData中的字符串集合执行where查询?

C# 如何在不使用ToList的情况下对OData中的字符串集合执行where查询?,c#,entity-framework,asp.net-web-api,odata,C#,Entity Framework,Asp.net Web Api,Odata,我有几个IList值作为破折号分隔的字符串存储在数据库中,而不是我的首选项,这只是它们的存储方式 作为一个例子,我在一个模型中得到一个这样的结果: [Column("Appliances")] private string appliancesString { get; set; } [NotMapped] public override IList<string> Appliances { get { return this.

我有几个IList值作为破折号分隔的字符串存储在数据库中,而不是我的首选项,这只是它们的存储方式

作为一个例子,我在一个模型中得到一个这样的结果:

    [Column("Appliances")]
    private string appliancesString { get; set; }
    [NotMapped]
    public override IList<string> Appliances { get {
            return this.appliancesString.TrimEnd('-').Split('-');
        }
        set {
            appliancesString = String.Join("-", value) + "-";
        }
    }
对我的API的任何过滤器调用,如果没有引用该API或任何其他ILists,都可以完美地工作。当我试图给他们中的任何一个打电话时,问题就出现了。例如,在本例中,使用类似于:

 $filter=Appliances/any(s: s eq '01')
这当然会带来:

 The specified type member 'Appliances' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
如果我将IQueryable转换为一个列表,它将在较小的表上工作,但我不能执行ToList(),因为表中有超过90k行,该类有390个变量,这是一个查询过程,需要花费很长时间,即使等待几分钟也不会返回结果

如果不使用ToList,我可以如何使其查询值而不失败?任何帮助,甚至指向我可能找到帮助的方向,我都将不胜感激

奇怪的是,由于我对此没有任何反应,所以我决定尝试将其转换为枚举并按这种方式进行。因为我认为问题可能只是字符串的集合或IList,尽管我尝试将其作为ICollection、IEnumerable和IQueryable,但它无法绑定到具有Id的对象。使用名为Appliance的枚举并使用IList Appliances,我仍然会得到LINQ to Entities错误


希望这可以提供更多的信息,以便有人能帮助我解决这个问题。

在这种情况下,您需要执行类似于
.Any(x=>x.applianceString.Contains(“-01-”)的操作。
并避免只能在内存中完成而不能转换为SQL的解析。@juharr这可能会起作用,但我将如何在OData中实现这一点?查询是由OData通过其查询选项处理的,而不是我。我没有OData的任何经验,因此我不确定您将如何将其翻译为工作。
 The specified type member 'Appliances' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.