Преобразование LINQ в .NET 2.0 - PullRequest
3 голосов
/ 05 августа 2009

Как мне использовать это в .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;
}

Ответы [ 4 ]

12 голосов
/ 05 августа 2009

Можете ли вы по-прежнему использовать C # 3.0, но не .NET 3.5? Если да, оставьте код таким, какой он есть, и используйте LINQBridge , то есть LINQ to Objects, реализованный для .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 голос
/ 05 августа 2009
[DataObjectMethod(DataObjectMethodType.Select)]
public IEnumerable<OperatorField> FindByType(String type)
{
    foreach (OperatorField ce in this.OperatorFields)
    {
        if (ce.Type == type)
            yield return ce;
    }
}
1 голос
/ 05 августа 2009

Что-то вроде этого возможно?

IList<OperatorField> col = new List<OperatorField>();
foreach (OperatorField f in this.OperatorFields)
{
    if (f.Type == type)
        col.Add(f);
}
return col;
0 голосов
/ 05 августа 2009

Подумайте о том, что делает оператор: он выполняет итерацию по каждому элементу в свойстве OperatorFields, проверяет тип, а затем добавляет элемент в список перед возвратом заполненного списка.

Итак, у вас есть

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

return list
...