Самый простой способ, вероятно,
protected override dynamic Get(int id)
{
return Get().FirstOrDefault(x=>x.ID==id);
}
Поскольку у некоторых людей возникли проблемы с выполнением этой работы, для тестирования просто создайте новый проект консоли .NET 4.0 (если вы переходите с версии 3.5, вам нужно добавить ссылки System.Core и Microsoft.CSharp) и вставить ее в программу. CS. Компилируется и запускается без проблем на 3 машинах, на которых я тестировал.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Dynamic;
namespace ConsoleApplication1
{
internal class Program
{
protected dynamic Get2(int id)
{
Func<dynamic, bool> check = x => x.ID == id;
return Enumerable.FirstOrDefault<dynamic>(this.Get(), check);
}
protected dynamic Get(int id)
{
return Get().FirstOrDefault(x => x.ID == id);
}
internal IEnumerable<dynamic> Get()
{
dynamic a = new ExpandoObject(); a.ID = 1;
dynamic b = new ExpandoObject(); b.ID = 2;
dynamic c = new ExpandoObject(); c.ID = 3;
return new[] { a, b, c };
}
static void Main(string[] args)
{
var program = new Program();
Console.WriteLine(program.Get(2).ID);
Console.WriteLine(program.Get2(2).ID);
}
}
}