我在这里有一个简单的LINQ查询:
var Staffs = new[]
{
new { id = 1, name = "Jefferson", age = 42},
new { id = 2, name = "Jacobson", age = 54},
new { id = 3, name = "Zhang", age = 34}
};
var payroll = new[]
{
new { pid = 1, wage = 5000},
new { pid = 2, wage = 6500},
new { pid = 3, wage = 6700}
};
var q = from stf in Staffs
from pay in payroll
where stf.id == pay.pid
select new
{
stfObj = stf,
pay.pid,
pay.wage
};
这里,stfObj将是一个包含id,name和age字段的对象
问题出现了:
是否可以将对象转换为字段本身,而无需对字段名称进行明确的硬编码,如下所示:
select new
{
stf.id,
stf.name,
stf.age,
pay.pid,
pay.wage
};
通过这种方式,当我向员工添加新字段时,不需要更改选择新块,例如性别
这可能吗?
(好吧,这看起来像问题here ......无论如何,希望能在这里得到更好的答案)
答案 0 :(得分:0)
这就是你想要的!
select new
{
sId=stfObj.id,
sName=stfObj.name,
sAge=stdObj.age,
pId=pay.pid,
pWage=pay.wage
};
答案 1 :(得分:0)
为什么不简单地嵌入你的对象?
select new {
staff = stf,
pay = pay
};
答案 2 :(得分:0)
我不知道,你需要什么。但您可以尝试使用Dictionary<>
。说,我们有一个班级:
public class Test
{
public string Name { get; set; }
public string Desc { get; set; }
}
所以你可以做到以下几点:
List<Test> list = new List<Test>
{
new Test
{
Name = "Test 1",
Desc = "Desc 1"
}
};
var temp = list.Select(t =>
{
Dictionary<string, object> values = new Dictionary<string, object>();
foreach (PropertyInfo pi in t.GetType().GetProperties())
values[pi.Name] = pi.GetValue(t, null);
return values;
})
.FirstOrDefault();
temp.ToList().ForEach(p => Console.WriteLine(string.Format("{0}:\t{1}", p.Key, p.Value)));
因此,如果您向Test
类添加属性,请执行以下操作:
public bool Extra { get; set; }
你会自动在词典中找到它。可能你必须使用反射方法重载来获得你所需要的......