我有一个匿名对象列表:
var jobs = new List<object>
{
new
{
JobName = "Job1",
JobDate = "Date1",
JobUser = "User1"
},
new
{
JobName = "Job2",
JobDate = "Date2",
JobUser = "User2"
}
};
如何使用linq找到“Job2”?
e.g。
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()不被接受,因为这个问题的正确答案是如何根据特定属性查找作业。
由于
答案 0 :(得分: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");
隐式类型数组的使用允许您的列表仍然是强类型的,但使用匿名类型。
如果您必须使用List<object>
,那么我希望:
IEnumerable<dynamic> dynamicJobs = jobs;
var job2 = dynamicJobs.First(x => x.JobName == "Job2");
上班。请注意,这不涉及复制列表或更改列表的声明类型。你也可以使用:
var job2 = jobs.Cast<dynamic>().First(x => x.JobName == "Job2");
答案 1 :(得分:3)
您可以在查询中使用dynamic
:
var job2 = jobs.Where(x => ((dynamic)x).JobName == "Job2");
答案 2 :(得分:2)
将其设为List<dynamic>
而不是List<object>
。
然后您可以使用正常的LINQ查询。
答案 3 :(得分: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();