查询FirstOrDefault的动态对象列表
本文关键字:对象 列表 动态 FirstOrDefault 查询 | 更新日期: 2023-09-27 18:21:07
以下代码将返回动态对象的Enumerable。
protected override dynamic Get(int id)
{
Func<dynamic, bool> check = x => x.ID == id;
return Enumerable.Where<dynamic>(this.Get(), check);
}
如何选择FirstOrDefault,使其成为单个对象而不是可枚举对象?
类似于这个答案,但只是想要SingleOrDefault。
您可以将代码与FirstOrDefault
一起使用,而不是与Where
一起使用。像这样:
protected override dynamic Get(int id)
{
Func<dynamic, bool> check = x => x.ID == id;
return Enumerable.FirstOrDefault<dynamic>(this.Get(), check);
}
最简单的方法可能是
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);
}
}
}
就是这样吗?
protected override dynamic Get(int id)
{
Func<dynamic, bool> check = x => x.ID == id;
return Enumerable.Where<dynamic>(this.Get(), check).FirstOrDefault();
}