C# 将LINQ转换为.NET 2.0

C# 将LINQ转换为.NET 2.0,c#,linq,c#-2.0,C#,Linq,C# 2.0,我应该如何在.NET2.0中使用它 [DataObjectMethod(DataObjectMethodType.Select)] public IEnumerable<OperatorField> FindByType(String type) { // return only selected type return (from ce in this.OperatorFields where ce.Type == type select ce).ToList()

我应该如何在.NET2.0中使用它

[DataObjectMethod(DataObjectMethodType.Select)]
public IEnumerable<OperatorField> FindByType(String type)
{
    //  return only selected type
    return (from ce in this.OperatorFields where ce.Type == type select ce).ToList();
}
我在3.5项目中使用了它,但现在我正在为一个旧项目添加新功能,我现在无法升级到3.5

我只是这样做了:

[DataObjectMethod(DataObjectMethodType.Select)]
public IEnumerable<OperatorField> FindByType(String type)
{
    //  return only selected type
    //return (from ce in this.OperatorFields where ce.Type == type select ce).ToList();

    List<OperatorField> r = new List<OperatorField>();

    foreach (OperatorField f in this.OperatorFields)
        if (f.Type == type)
            r.Add(f);

    return r;
}

您仍然可以使用C3.0而不是.NET3.5吗?如果是这样,请保持代码原样并使用,这是为.NET 2.0实现的LINQ to对象

否则,请执行以下操作:

[DataObjectMethod(DataObjectMethodType.Select)]
public IEnumerable<OperatorField> FindByType(String type)
{
    List<OperatorField> list = new List<OperatorField>();
    foreach (OperatorField ce in OperatorFields)
    {
        if (ce.Type == type)
        {
            list.Add(ce);
        }
    }
    return list;
}

也许是这样的

IList<OperatorField> col = new List<OperatorField>();
foreach (OperatorField f in this.OperatorFields)
{
    if (f.Type == type)
        col.Add(f);
}
return col;

考虑一下该语句正在做什么,它迭代OperatorFields属性中的每个项,检查类型,然后在返回完成的列表之前将该项添加到列表中

所以你有

Create new list
For each item in OperatorFields
  if item.Type equals type
    add item to list

return list

仅限2.0版本:至少要等到下一个版本,这样我们才能告诉客户他们需要升级框架。我只是补充了我的想法,一个解决方案。@balexandre:不,你错了。您可以使用VisualStudio2008和C3.0功能,但仍以.NET2.0为目标。你不需要你的客户升级框架就可以了。@balexandre:你是在VS2008还是2005中开发的?Jon对LINQBridge的建议实际上使您可以在.NET2.0上运行LINQ。。。但是使用VS2k8附带的C3编译器。因此,如果您在VS2k8中开发,您可以轻松地保留代码并添加程序集。它将在.net 2.0上完美地工作。在这种情况下,您可以使用C 3-lambda表达式、查询表达式等。使用LINQBridge,您可以保留原始代码。@Downvoter:请解释一下您不喜欢这个答案的原因。如果您看一下IL,真的有什么不同吗?你能测量两者的性能,看看其中一个更快吗?2分钟和4个相同的答案:@StingyJack:IL一点也不相似,因为linq版本将调用System.linq.Enumerable.Where、System.linq.Enumerable.Select和System.linq.Enumerable.ToList,而另一个版本将调用IEnumerable.GetEnumerator并迭代结果。
Create new list
For each item in OperatorFields
  if item.Type equals type
    add item to list

return list