c# - 基于接口实现的 LINQ 连接
问题描述
假设我有一个接口,它基本上是两个子接口的组合。这背后的想法是,我有两个不同的 API。提供有关个人的公共信息的一种。并且一旦提供“秘密”信息。它可能看起来像这样:
public interface IPublicPersonData
{
// The ID is the key
int PersonId { get; set; }
// This property is specific to this part
string Name {get; set; }
}
public interface ISecretPersonData
{
// The ID is the key
int PersonId { get; set; }
// This property is specific to this part
decimal AnnualSalary{ get; set; }
}
public interface IPerson: IPublicPersonData, ISecretPersonData
{
// No new stuff, this is merely a combination of the two.
}
所以基本上我得到了两个列表。一个List<IPublicPersonData>
和一个List<ISecretPersonData>
。我想将这些加入一个单一的List<IPerson>
,理想情况下使用 LINQ。
我真的找不到任何关于如何根据输入类型控制 LINQ 输出类型的信息,即使存在逻辑(以实现接口的接口的方式)。
public List<IPerson> JoinPersonData(
List<IPublicPersonData> publicData,
List<ISecretPersonData> secretData)
{
// What the heck goes here?
}
解决方案
假设您编写了一个方法,例如:
public ISomething CombinePersonWithSecret(
IPublicPersonData publicPerson,
ISecretPersonData secret)
{
if(publicPerson.PersonId != secret.PersonId)
{
throw ...;
}
//join 2 params into a single entity
return something;
}
现在你可能...
IEnumerable<ISomething> secretivePeople = PublicPeople.Join(
SecretPersonData,
publicPerson => publicPerson.PersonId,
secret => secret.PersonId,
(publicPerson, secret) => CombinePersonWithSecret(publicPerson, secret))
推荐阅读
- ms-access - 在 MS Access 2016 中加入两个以上的表
- angular - Angular 8 - 使用路由器服务路由到初始 url 得到一个冗余的“/”
- javascript - 如何在 JavaScript 中获取未附加子项(div)的高度?
- javascript - 删除 JavaScript 中的多个特定子节点
- ansible - 将 Ansible 升级到 2.9.9 后无法连接到 Windows 主机,主机名已从 Ansible 日志中消失
- python - 无法从 html 表单获取任何 POST
- php - 使用相同的样式设置显示的文本看起来不同
- html - 引导表单给出 html 验证错误
- python - 在 Windows 上安装 Python + Numpy 和 Matplotlib 库需要多少空间?
- python - Pandas dropna() 不工作(这绝对不是常见的原因!)