以下代码将返回可枚举的动态对象。
protected override dynamic Get(int id)
{
Func<dynamic, bool> check = x => x.ID == id;
return Enumerable.Where<dynamic>(this.Get(), check);
}
如何选择 FirstOrDefault 以使其成为单个对象而非Enumerable?
与this answer类似,但只想要SingleOrDefault。
答案 0 :(得分:4)
您可以将代码与FirstOrDefault
代替Where
。像这样:
protected override dynamic Get(int id)
{
Func<dynamic, bool> check = x => x.ID == id;
return Enumerable.FirstOrDefault<dynamic>(this.Get(), check);
}
答案 1 :(得分:2)
最简单的方法可能是
protected override dynamic Get(int id)
{
return Get().FirstOrDefault(x=>x.ID==id);
}
由于有些人在完成这项工作时遇到了麻烦,所以要测试一下新的.NET 4.0控制台项目(如果从3.5转换,则需要添加System.Core和Microsoft.CSharp引用)并将其粘贴到Program中。 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);
}
}
}
答案 2 :(得分:0)
就这样?
protected override dynamic Get(int id)
{
Func<dynamic, bool> check = x => x.ID == id;
return Enumerable.Where<dynamic>(this.Get(), check).FirstOrDefault();
}