是否可以通过两个 id 从 IEnumerablle select 项目?
Is it possible to select items from IEnumerablle by two ids?
我有这段代码,我通常用它来 update/delete/create 个项目
HashSet<int> current = new HashSet<int>(diagram.Links.Select(lnk => lnk.IDInput);
HashSet<int> received = new HashSet<int>(d.Links.Select(lnk => lnk.IDInput));
IEnumerable<int> delete = current.Except(received);
IEnumerable<int> new = received.Except(current);
当我的列表使用一个 ID 时,它工作得很好,但在这种情况下,我想做类似 diagram.Links.Select(lnk => lnk.IDInput AND lnk.IDOutput)
的事情,甚至可能还是我应该改用 Where?
提前致谢
我会选择这 3 个选项中的一个
创建匿名对象
diagram.Links.Select(lnk => new {lnk.IDInput, lnk.IDOutput})
创建值元组
diagram.Links.Select(lnk => (lnk.IDInput, lnk.IDOutput))
使用 Class / 结构
public class IDHolder
{
public string IDInput;
public string IDOutput;
}
diagram.Links.Select(lnk => new IDHolder() {IDInput = lnk.IDInput, IDOutput = lnk.IDOutput}))
这三个都可以,后者在我看来是最连贯的,但请选择最适合您的。
为了不更改代码中的其他逻辑,您可以像这样简单地使用 Concat
:
HashSet<int> current = new HashSet<int>(diagram.Links.Select(lnk => lnk.IDInput)
.Concat(diagram.Links.Select(lnk => lnk.IDOutput)));
HashSet<int> received = new HashSet<int>(d.Links.Select(lnk => lnk.IDInput)
.Concat(d.Links.Select(lnk => lnk.IDOutput)));
我有这段代码,我通常用它来 update/delete/create 个项目
HashSet<int> current = new HashSet<int>(diagram.Links.Select(lnk => lnk.IDInput);
HashSet<int> received = new HashSet<int>(d.Links.Select(lnk => lnk.IDInput));
IEnumerable<int> delete = current.Except(received);
IEnumerable<int> new = received.Except(current);
当我的列表使用一个 ID 时,它工作得很好,但在这种情况下,我想做类似 diagram.Links.Select(lnk => lnk.IDInput AND lnk.IDOutput)
的事情,甚至可能还是我应该改用 Where?
提前致谢
我会选择这 3 个选项中的一个
创建匿名对象
diagram.Links.Select(lnk => new {lnk.IDInput, lnk.IDOutput})
创建值元组
diagram.Links.Select(lnk => (lnk.IDInput, lnk.IDOutput))
使用 Class / 结构
public class IDHolder { public string IDInput; public string IDOutput; } diagram.Links.Select(lnk => new IDHolder() {IDInput = lnk.IDInput, IDOutput = lnk.IDOutput}))
这三个都可以,后者在我看来是最连贯的,但请选择最适合您的。
为了不更改代码中的其他逻辑,您可以像这样简单地使用 Concat
:
HashSet<int> current = new HashSet<int>(diagram.Links.Select(lnk => lnk.IDInput)
.Concat(diagram.Links.Select(lnk => lnk.IDOutput)));
HashSet<int> received = new HashSet<int>(d.Links.Select(lnk => lnk.IDInput)
.Concat(d.Links.Select(lnk => lnk.IDOutput)));