我的应用程序中有三个接口(interface)
public interface FBBase { }
public interface IFoo : FBBase { }
public interface IBar : FBBase { }
我还有一个包含 List
的类两者 IFoo
和IBar
public class FBUser
{
public List<IFoo> foos { get; set; }
public List<IBar> bars { get; set; }
}
以及一些实现这些接口(interface)的类
public class Fee : IFoo { }
public class Baz : IBar { }
public class PhiBat : IFoo, IBar { }
在另一个类中,我用 FBUser
做了一些工作。对象。我想收藏一个List<IFBBase>
包含 FBUser.foos
中的每个唯一引用和FBUser.bars
。此外,我还想排除某些Type
来自List<IFBBase>
.
还有比这更干净的方法吗?这是正确的方法吗?
public class FBUserWorker
{
List<Type> discludeTypes { get; set; } = new List<Type>();
public FBUserWorker()
{
discludeTypes.Add(typeof(PhiBat));
}
public void DoWork(FBUser userObj)
{
var fbBaseList = userObj.foos.Where(x => !discludeTypes.Contains(x.GetType())).Cast<IFBBase>().ToList();
fbBaseList.AddRange(userObj.bars.Where(x => !discludeTypes.Contains(x.GetType())).Cast<IFBBase>().ToList());
fbBaseList = fbBaseList.Distinct().ToList();
}
}
最佳答案
使用Concat
合并列表(转换为 IEnumerable<IFBase>
),然后运行 Where
和Distinct
逻辑:
result = userObj.foos.Cast<IFBBase>()
.Concat(userObj.bars.Cast<IFBase>())
.Where(x => !discludeTypes.Contains(x.GetType()))
.Distinct()
.ToList();
关于c# - 复杂的 LINQ 查询来构建两个列表、转换每个列表中的每个值并组合列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167980/