在C#中查找匿名对象列表中的项

MaY*_*YaN 2 c# linq anonymous-objects

我有一个匿名对象列表:

var jobs = new List<object>
               {
                 new
                 {
                   JobName = "Job1",
                   JobDate = "Date1",
                   JobUser = "User1"
                 },
                 new
                 {
                   JobName = "Job2",
                   JobDate = "Date2",
                   JobUser = "User2"
                 }
               };
Run Code Online (Sandbox Code Playgroud)

如何使用linq找到"Job2"?

例如

var job2 = jobs.Where(x=>x.JobName == "Job2");
Run Code Online (Sandbox Code Playgroud)

我知道以下内容但不能以优雅的方式将其应用于上面的用例:

var anonymJob = new 
                {
                  JobName = "Job2",
                  JobDate = "Date2",
                  JobUser = "User2"
                };

dynamic tJob = anonymJob.GetType();
string jobName = tJob.JobName; // this will be "Job2"
Run Code Online (Sandbox Code Playgroud)

请注意jobs.First()或Last()不被接受作为此问题的正确答案是如何根据其特定属性查找作业.

谢谢

Jon*_*eet 8

如果您使用相同的方法,则可以使用匿名类型的列表:

var jobs = new [] {
    new { JobName = "Job1", JobDate = "Date1", JobUser = "User1" },
    new { JobName = "Job2", JobDate = "Date2", JobUser = "User2" }
}.ToList();

var job2 = jobs.First(x => x.JobName == "Job2");
Run Code Online (Sandbox Code Playgroud)

隐式类型数组的使用允许您的列表仍然是强类型,但使用匿名类型.

如果你必须使用a List<object>,那么我希望:

IEnumerable<dynamic> dynamicJobs = jobs;
var job2 = dynamicJobs.First(x => x.JobName == "Job2");
Run Code Online (Sandbox Code Playgroud)

上班.请注意,这不涉及复制列表或更改列表的声明类型.你也可以使用:

var job2 = jobs.Cast<dynamic>().First(x => x.JobName == "Job2");
Run Code Online (Sandbox Code Playgroud)