2

我有一个匿名对象列表:

var jobs = new List<object>
               {
                 new
                 {
                   JobName = "Job1",
                   JobDate = "Date1",
                   JobUser = "User1"
                 },
                 new
                 {
                   JobName = "Job2",
                   JobDate = "Date2",
                   JobUser = "User2"
                 }
               };

如何使用 linq 找到“Job2”?

例如

var job2 = jobs.Where(x=>x.JobName == "Job2");

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

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

dynamic tJob = anonymJob.GetType();
string jobName = tJob.JobName; // this will be "Job2"

请注意 jobs.First() 或 Last() 不被接受,因为这个问题的正确答案是如何根据其特定属性找到工作。

谢谢

4

4 回答 4

9

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

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");

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

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

IEnumerable<dynamic> dynamicJobs = jobs;
var job2 = dynamicJobs.First(x => x.JobName == "Job2");

去工作。请注意,这根本不涉及复制列表或更改列表的声明类型。您还可以使用:

var job2 = jobs.Cast<dynamic>().First(x => x.JobName == "Job2");
于 2013-05-13T13:57:41.093 回答
4

您可以dynamic在查询中使用:

var job2 = jobs.Where(x => ((dynamic)x).JobName == "Job2");
于 2013-05-13T13:56:18.680 回答
2

使它成为一个List<dynamic>而不是List<object>.

然后您可以使用普通的 LINQ 查询。

于 2013-05-13T13:56:11.987 回答
1

使用List<dynamic>而不是List<object>.

将其粘贴到 LINQPad 以查看:

var jobs = new List<dynamic>
               {
                 new
                 {
                   JobName = "Job1",
                   JobDate = "Date1",
                   JobUser = "User1"
                 },
                 new
                 {
                   JobName = "Job2",
                   JobDate = "Date2",
                   JobUser = "User2"
                 }
               };

jobs.Where(x=>x.JobName == "Job2").Dump();
于 2013-05-13T13:56:33.867 回答