2009-08-05 123 views
3

我應該如何在.NET 2.0中使用它...?將LINQ轉換爲.NET 2.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; 
} 
+0

如果你看一看的IL,是真​​的有什麼區別嗎?你能測量兩者的性能,看看其中一個是否更快? – StingyJack 2009-08-05 11:44:58

+0

2分鐘和4個相同的答案:) – cwap 2009-08-05 11:46:35

回答

12

你還能使用C#3.0,但不是.NET 3.5?如果是這樣,請保持原樣,並使用LINQBridge,這是LINQ to .NET 2.0實現的對象。

否則,這樣做:

[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; 
} 
1

像這樣的事情吧?

IList<OperatorField> col = new List<OperatorField>(); 
foreach (OperatorField f in this.OperatorFields) 
{ 
    if (f.Type == type) 
     col.Add(f); 
} 
return col; 
1
[DataObjectMethod(DataObjectMethodType.Select)] 
public IEnumerable<OperatorField> FindByType(String type) 
{ 
    foreach (OperatorField ce in this.OperatorFields) 
    { 
     if (ce.Type == type) 
      yield return ce; 
    } 
} 
0

想想語句是幹什麼的,它遍歷在OperatorFields財產的每個項目,覈對型號,然後加入項目列表返回完成列表中。

所以,你有

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

return list