我有baase模型课程
public class BaseModel
{
[Not Mapped]
public string ExternalId;
}
基本模型类被两个子类继承
public class ChildA : BaseModel
{
public string ExternalId;
}
public class ChildB : BaseModel
{
public string Name;
}
所有子类均继承自BaseModel。我已经在某些子类中声明了ExternalId,因此可以在我的抽象类中使用linq。由于这些模型首先在EF模型中使用,因此这就是为什么在BaseModel中它具有NotMapped属性,因此EF无法生成此列。
这是抽象类
public abstract class Test<T> : ITest<T> where T : BaseModel, new()
{
protected virtual IEnumerable<T> TestMethod(IEnumerable<T> listModels)
{
var items = listModels.Where<T>(i => i.ExternalId != "ABC").ToList();
}
}
如何根据ChildA的ExternalId进行过滤
您的设计有这样的问题
'ChildA.ExternalId'隐藏继承的成员'BaseModel.ExternalId'
您不应该在ExternalId
类中声明ChildA
。
TestMethod
没有返回值,所以您应该返回。''Test.TestMethod(System.Collections.Generic.IEnumerable)':并非所有代码路径都返回值
您应该这样解决
public interface ITest<T> where T : BaseModel, new()
{
IEnumerable<T> TestMethod(IEnumerable<T> listModels);
}
public class Test<T> : ITest<T> where T : BaseModel, new()
{
public IEnumerable<T> TestMethod(IEnumerable<T> listModels)
{
return listModels.Where<T>(i => i.ExternalId != "ABC").ToList();
}
}
对此写相同:
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
testFinal tf = new testFinal();
List<BaseModel> mylist = new List<BaseModel>()
{
new ChildA(){ ExternalId = "1"},
new ChildB(){ ExternalId = "1"},
new ChildA(){ ExternalId = "2"},
new ChildA(){ ExternalId = "3"},
new ChildA(){ ExternalId = "1"},
new ChildB(){ ExternalId = "2"},
};
var result = tf.TestMethod(mylist);
Console.ReadLine();
}
}
public class BaseModel
{
public string ExternalId;
}
public class ChildA : BaseModel
{
//public string ExternalId;
}
public class ChildB : BaseModel
{
public string Name;
}
public abstract class Test<T> : ITest<T> where T : BaseModel, new()
{
public IEnumerable<T> TestMethod(IEnumerable<T> listModels)
{
var items = listModels.Where<T>(i => i.ExternalId != "1").ToList();
return items;
}
}
public interface ITest<T> where T : BaseModel
{
IEnumerable<T> TestMethod(IEnumerable<T> listModels);
}
public class testFinal : Test<BaseModel>
{
}
}