无法在IEnumerable <t> </t>上找到查询模式的实现

时间:2012-10-24 08:30:24

标签: c# linq compiler-errors ienumerable

我有IEnumerable<T>作为方法的参数,其中T是结构类型:

using System;
using System.Collections.Generic;
using System.Linq;
using ...

public static class Foo
{
    internal struct CellDiff
    {
        public int RefX;
        public int RefY;
        public object OldValue;
        public object NewValue;
    }

    private static void ItemChanged(IEnumerable<CellDiff> diffs, int cellX, int cellY)
    {
        var change = from CellDiff diff in diffs
                     where diff.RefX == cellX && diff.RefY == cellY
                     select diff;

        ...
    }
}

这会导致以下错误:

  

(参数)IEnumerable<CellDiff> diffs

     

错误:
  找不到源类型&#39; CellDiff&#39;的查询模式的实现。 &#39; Where&#39;没找到。

我也试过diffs.AsQueryable(),但无济于事。

我在IEnumerable<T>上执行LINQ查询通常没有问题。我有点迷失在这里发生的事情。

2 个答案:

答案 0 :(得分:3)

在LINQ查询语法中指定类型会使用该类型参数创建对Cast扩展方法的调用。

您是否在某处定义了自己的Cast

答案 1 :(得分:1)

你需要更改查询,更新一个就像这样

 var change = from diff in diffs //changed like removed "CellDiff" from this
                     where diff.RefX == cellX && diff.RefY == cellY
                     select diff;

在查询之后不需要CellDiff