创建具有子类型限制的linq表达式
|
我有此类型
IEnumerable<MyBaseType>
的列表,我正尝试为此创建一个额外的地方条款来检索列表中的特定项目。该特定值仅存在于子类型MyFirstType和MySecondType上。不在MyBaseType上。
是否可以创建一种表达...
MyList.Where(b => (b is MyFirstType || (b is MySecondType)) && b.SpecificValue == message.SpecificValue);
上面的方法不起作用,因为b的类型为MyBaseType,并且那里不存在SpecificValue。还要注意,我确实有另一个子类型MyThirdType,它们都没有SpecificValue。
做我想做的是什么...
foreach (dynamic u in MyList)
{
if (u is MyFirstType || u is MySecondType)
{
if (u.SpecificValue == message.SpecificValue)
{
//Extracted code goes here
break;
}
}
}
任何人都有一个想法如何为上述情况创建linq表达式?
没有找到相关结果
已邀请:
3 个回复
貉骂
这将需要测试类的类型并使用动态-因此您最好直接将项目转换为
或
。 一种替代方法是使用反射来检查属性是否存在,使用这种方法,只要项目确实具有您感兴趣的属性,您就不必依赖它们的实际类型:
如果可以选择修改类层次结构,则可以让
或
实现保存属性的接口,然后可以在Linq查询中使用
:
蔬谢窗港
然后,使MyFirstType和MySecondType从此接口派生:
然后,过滤并强制转换:
怪酞撩匹