Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用属性名的情况下从c#中的基类获取值_C#_.net_Entity Framework_Linq - Fatal编程技术网

如何在不使用属性名的情况下从c#中的基类获取值

如何在不使用属性名的情况下从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

我有一个调用dbcontext的sqlquery方法的方法,方法如下:

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;