从派生 class 获取 属性 的更好方法
Better way to get property from derived class
我有下一个class
public class MainClass
{
public ClassA someProp { get; set; }
}
public class ClassA
{
public virtual Type Types => Type.None;
}
public class ClassB:ClassA
{
public override Type Types => Type.Default;
public string FieldName { get; set; }
}
我想从 ClassB 获取 FieldName
var result = entities.Where(x => x.someProp != null).Select(x => x.someProp).ToList();
比我得到的
var fields = (from ClassB in result select t.FieldName).ToList();
从 ClassB
获取 FieldName
的更好方法是什么
我认为这不是最佳解决方案。也许我的问题有一些最佳实践?
你可以试试这个:
var fields = entities
.Where(item => item.someProp is ClassB)
.Select(item => item.someProp)
.Cast<ClassB>()
.Select(item => item.FieldName).ToList();
这是一个更短的方法,您可以尝试从 someProp 转换 ClassB:
var result = lst.Where(x => x.someProp != null).Select(x => (ClassB)x.someProp).Select(x => x.FieldName).ToList();
您必须过滤实体并仅获取 B 类实体,然后像往常一样阅读 属性。
var values = entities
.Select(mainClass => mainClass.SomeProp)
.OfType<ClassB>()
.Select(classB => classB.FieldName)
我有下一个class
public class MainClass
{
public ClassA someProp { get; set; }
}
public class ClassA
{
public virtual Type Types => Type.None;
}
public class ClassB:ClassA
{
public override Type Types => Type.Default;
public string FieldName { get; set; }
}
我想从 ClassB 获取 FieldName
var result = entities.Where(x => x.someProp != null).Select(x => x.someProp).ToList();
比我得到的
var fields = (from ClassB in result select t.FieldName).ToList();
从 ClassB
FieldName
的更好方法是什么
我认为这不是最佳解决方案。也许我的问题有一些最佳实践?
你可以试试这个:
var fields = entities
.Where(item => item.someProp is ClassB)
.Select(item => item.someProp)
.Cast<ClassB>()
.Select(item => item.FieldName).ToList();
这是一个更短的方法,您可以尝试从 someProp 转换 ClassB:
var result = lst.Where(x => x.someProp != null).Select(x => (ClassB)x.someProp).Select(x => x.FieldName).ToList();
您必须过滤实体并仅获取 B 类实体,然后像往常一样阅读 属性。
var values = entities
.Select(mainClass => mainClass.SomeProp)
.OfType<ClassB>()
.Select(classB => classB.FieldName)