【问题标题】:IEnumerable Any() with a simple int[]带有简单 int[] 的 IEnumerable Any()
【发布时间】:2011-06-10 20:54:43
【问题描述】:

快速提问:我正在将 EF4 EntityCollection 中的实体 ID 与循环中的简单 int[] 进行比较。我想做类似的事情:

for (int i = 0; i < Collection.Count; ++i)
{
    Array.Any(a => a.value == Collection[i].ID) ? /* display yes */ : /* display no */;
}

我只是不知道如何将数组中的值与 EntityCollection 中的值进行比较,或者换句话说,用什么来代替我上面编写的 value 属性。

【问题讨论】:

    标签: c# arrays ienumerable any entitycollection


    【解决方案1】:

    代码应修改为:

    int[] arr = //this is the integer array
    IEnumerable Collection = //This is your EF4 collection
    for (int i = 0; i < Collection.Count; ++i)
    {
        arr.Any(a => a == Collection[i].ID) ? /* display yes */ : /* display no */;
    }
    

    我在顶部列出了一些变量,以便我们清楚什么是什么。改变的主要部分是我们调用arr.Any,而不是调用Array.AnyAnyint[] 的扩展方法,因此您在数组本身上调用它,而不是在 Array 类上。

    这能解决问题吗?

    【讨论】:

    • 这可能会导致从数据库中获取所有行!这可能会影响性能。
    • 就我而言,我想从数据库中获取所有行。这是故意的行为,只检索了 10 行左右。那个特定的数据库表永远不会增长,所以没关系。
    【解决方案2】:

    跳过循环,你可以做这样的事情

    array.Any(a => collection.Any(c => c.ID == a)) ? /* display yes */ : /* display no */;
    

    如果您需要循环,那么您可以跳过上面的第二个Any() 并执行

    array.Any(a => collection.ElementAt(i).ID == a) ? /* display yes */ : /* display no */;
    

    【讨论】:

    • 无法跳过循环,因为我正在对循环中的实体执行其他操作。
    • @kevinmajor1 啊,我明白了。我添加了另一个可用于循环的片段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    相关资源
    最近更新 更多