【问题标题】:Linq Query If Field Is In An Array?Linq查询字段是否在数组中?
【发布时间】:2010-09-20 14:23:51
【问题描述】:

下面的代码不正确,但这里的想法是我想从“SqlTable”中获取值,其中“Field”的值在“Array[]”内部。

var Result =
    from a in SqlTable
    where a.Field is in Array[]
    select a;

【问题讨论】:

    标签: c# linq arrays


    【解决方案1】:

    你应该可以使用Queryable.Contains Extension Method:

    var result =
        from a in mySqlTable
        where myArray.Contains(a.Field)
        select a;
    

    另见:Creating IN Queries With Linq To Sql

    【讨论】:

    • 或“其中 Array.IndexOf(myArray, a.Field) > -1”
    • @Floyd:如果您使用 LINQ-to-Objects,这会有效,但我不确定您使用 LINQ-to-SQL 时是否有效。
    • @msarchet: 见 mscorlib.dll - "bool IList.Contains(object value) { return Array.IndexOf(this, value) >= GetLowerBound(0); } " - 这是框架 - Array.Contains(..) 的实现。但确实如此,它没有“myArray.Contains(a.Field)”那么漂亮。
    • @Floyd 我知道myArray.Contains(a.Field) 只是对更复杂事物的抽象。从可读性的角度来看,我说的更多。
    【解决方案2】:

    我现在假设 Field 和 Array[] 包含具有相等运算符的值,并且是 A。然后你可以这样写:

    var Result =
        from a in SqlTable
        where Array[].Any( ae => ae == a.Field)
        select a;
    

    【讨论】:

    • Any 真的会比 Contains 慢那么多吗?
    • 我认为,因为 Contians 使用 Array.IndexOf 并且这会对数组进行交互并与等号进行比较。 Any interates 数组并执行委托。
    • 我会检查的。谢谢弗洛伊德。
    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2019-08-02
    相关资源
    最近更新 更多