如何在不使用属性名的情况下从c#中的基类获取值
我有一个调用dbcontext的sqlquery方法的方法,方法如下:如何在不使用属性名的情况下从c#中的基类获取值,c#,.net,entity-framework,linq,C#,.net,Entity Framework,Linq,我有一个调用dbcontext的sqlquery方法的方法,方法如下: private IEnumerable<object> getRawDataDb(DependencySheet sheet, string name) { switch(name) { case "DefaultData": return sqlQuery.Database.SqlQuery<DefaultData>(sheet.Query
private IEnumerable<object> getRawDataDb(DependencySheet sheet, string name)
{
switch(name)
{
case "DefaultData":
return sqlQuery.Database.SqlQuery<DefaultData>(sheet.Query);
case "OpenInventory":
return sqlQuery.Database.SqlQuery<OpenInventory>(sheet.Query);
case "CompQuals":
return sqlQuery.Database.SqlQuery<CompQual>(sheet.Query);
}
return null;
}
然后使用foreach循环对其进行迭代,如下所示:
foreach(var raw in rawData)
{
var tw = raw.GetType().BaseType.GetFields(BindingFlags.NonPublic|BindingFlags.Instance);
}
现在,在执行时,我希望将下面显示的值放入原始对象中的图像中:
但是我无法获得这些值,我已经使用了gettype
谢谢
达曼如果我理解的话,你有基类:
public class BaseClass
{
public int ID { get; set; }
public string Name { get; set; }
}
还有一些是从中继承的(例如OpenInventory):
然后你可以写:
public IEnumerable<BaseClass> getRawDataDb(DependencySheet sheet, string name)
{
//type declaration OpenInventory must be located at the same assembly with getRawDataDb
var type = Assembly.GetExecutingAssembly().GetTypes().Where(x => x.Name == name).First();
var res = new List<BaseClass>();
var source = sqlQuery.Database.SqlQuery(type, sheet.Query);
foreach (var item in source)
res.Add(item as BaseClass);
return res;
}
因此,您将能够显式调用基类的属性:
res.First().ID
您还可以通过显式转换调用其他属性:
(res.First() as OpenInventory).AnotherProperty;
为什么不使用三种方法返回正确类型的值,并避免不必要的
name
参数和开关
。你把这些都塞进一个瑞士军刀的方法中,似乎是在制造一个问题。实际上,我们正试图把它变成一个通用的方法。你能详细描述一下“T”的错误吗?我自己尝试了这段代码,一切正常。现在可以工作了,但是我想要getRawDataDb(dependentData).ToList();“OpenInventory”也应该是动态的,或者我可以调用EFI中提到的所有类更改我的答案是你想要的吗?
var res = getRawDataDb(dependentData, sheetName).ToList();
res.First().ID
(res.First() as OpenInventory).AnotherProperty;