C# 动态LINQ查询,根据变量选择最大列名
为什么下面的代码不能产生预期的结果C# 动态LINQ查询,根据变量选择最大列名,c#,sql,linq,C#,Sql,Linq,为什么下面的代码不能产生预期的结果 public string LinqTest() { //hardcoded here for clarity's sake //real code will hit a database var jsonString = "DrugClass"; List<Drugs> drugList = new List<Drugs>(
public string LinqTest()
{
//hardcoded here for clarity's sake
//real code will hit a database
var jsonString = "DrugClass";
List<Drugs> drugList = new List<Drugs>()
{
new Drugs() { DrugId=1, DrugClass="HHH", DrugDosage=120, DrugName="Drug1"},
new Drugs() { DrugId=2, DrugClass="H2H", DrugDosage=100, DrugName="Drug2"},
new Drugs() { DrugId=3, DrugClass="HHH", DrugDosage=100, DrugName="Drug3"},
new Drugs() { DrugId=4, DrugClass="WA2", DrugDosage=200, DrugName="Drug4"}
};
var query = (from d in drugList
select d.GetType().GetProperty(jsonString)).Max();
return query.ToString();
}
公共字符串LinqTest()
{
//为了清晰起见,这里进行了硬编码
//真正的代码将命中数据库
var jsonString=“DrugClass”;
列表药物列表=新列表()
{
新药(),
新药(),
新药(),
新药()
};
var query=(来自药物列表中的d)
选择d.GetType().GetProperty(jsonString)).Max();
返回query.ToString();
}
我希望这段代码从上面看到的集合中选择属性DrugClass并返回“WA2”。为什么不是这样呢?如果你从这段代码中去掉
.Max()
,你会看到它返回一个IEnumerable
。。。不是你想要的
var query = (from d in drugList
select d.GetType().GetProperty(jsonString)).Max();
你就快到了。。。获得PropertyInfo
类后,可以使用其GetValue
方法从该类的实际实例中获取该属性的值
在下面的代码中,我将获取属性的代码(let property=…
语句)与获取被评估的特定druges
类的值(最后一行)的代码分开。这应该对你有用(在LINQPad为我工作)
注意:如果您使用的是.NET 4.5或更高版本,您可以从
GetValue
中删除null
,只需执行property.GetValue(d)
。。。在早期版本的.NET中,它是必需的,因为没有重载只会占用属性信息
如果从这段代码中去掉.Max()
,您将看到它返回一个IEnumerable
。。。不是你想要的
var query = (from d in drugList
select d.GetType().GetProperty(jsonString)).Max();
你就快到了。。。获得PropertyInfo
类后,可以使用其GetValue
方法从该类的实际实例中获取该属性的值
在下面的代码中,我将获取属性的代码(let property=…
语句)与获取被评估的特定druges
类的值(最后一行)的代码分开。这应该对你有用(在LINQPad为我工作)
注意:如果您使用的是.NET 4.5或更高版本,您可以从
GetValue
中删除null
,只需执行property.GetValue(d)
。。。在早期版本的.NET中,它是必需的,因为没有重载只会占用属性信息
如果从这段代码中去掉.Max()
,您将看到它返回一个IEnumerable
。。。不是你想要的
var query = (from d in drugList
select d.GetType().GetProperty(jsonString)).Max();
你就快到了。。。获得PropertyInfo
类后,可以使用其GetValue
方法从该类的实际实例中获取该属性的值
在下面的代码中,我将获取属性的代码(let property=…
语句)与获取被评估的特定druges
类的值(最后一行)的代码分开。这应该对你有用(在LINQPad为我工作)
注意:如果您使用的是.NET 4.5或更高版本,您可以从
GetValue
中删除null
,只需执行property.GetValue(d)
。。。在早期版本的.NET中,它是必需的,因为没有重载只会占用属性信息
如果从这段代码中去掉.Max()
,您将看到它返回一个IEnumerable
。。。不是你想要的
var query = (from d in drugList
select d.GetType().GetProperty(jsonString)).Max();
你就快到了。。。获得PropertyInfo
类后,可以使用其GetValue
方法从该类的实际实例中获取该属性的值
在下面的代码中,我将获取属性的代码(let property=…
语句)与获取被评估的特定druges
类的值(最后一行)的代码分开。这应该对你有用(在LINQPad为我工作)
注意:如果您使用的是.NET 4.5或更高版本,您可以从GetValue
中删除null
,只需执行property.GetValue(d)
。。。在早期版本的.NET中,它是必需的,因为没有重载只获取PropertyInfo
d。GetType().GetProperty()
不会返回您认为是的内容。它返回一个对象,该对象描述与类型相关的属性,而不是特定实例,这正是您想要的
拥有该描述对象后,需要做的是使用该方法对特定实例上的属性求值
我相信,如果您将LINQ更改为(未经测试)
你会更接近你要找的东西 d.GetType().GetProperty()
没有返回您认为是的内容。它返回一个对象,该对象描述与类型相关的属性,而不是特定实例,这正是您想要的
拥有该描述对象后,需要做的是使用该方法对特定实例上的属性求值
我相信,如果您将LINQ更改为(未经测试)
你会更接近你要找的东西 d.GetType().GetProperty()
没有返回您认为是的内容。它返回一个对象,该对象描述与类型相关的属性,而不是特定实例,这正是您想要的
你需要做什么