我有一个代码列表如下
public Code{
int id;
string Description;
}
List<Code> AllCodes;
我有一个来自不同来源的选定代码列表。
var relatedCodes = //gets the list of int 'id's from a different source.
使用linq
,我需要加入AllCodes
和relatedCodes
,以便结果列表包含给定Code
的所有id
个元素。众所周知,int
中的所有relatedCodes
值都在id
中有效AllCodes
s。 [relatedCodes
是int
数组]
result = //how to write the linq expression?
我正在尝试这样的事情,但它会抛出错误
result = AllCodes.All(x => x.Code==relatedCodes);
答案 0 :(得分:2)
List<Code> result = AllCodes.Where(x => relatedCodes.Contains(x.id)).ToList();
答案 1 :(得分:2)
首先,与Join
无关。问题简要How can I get the Codes of which relatedCodes contains the id?
。您可以使用Where
过滤列表。
var result = AllCodes.Where( c=> relatedCodes.Contains(c.id));
答案 2 :(得分:2)
修改强>
由于relatedCodes
的类型为int[]
(我使用了Code
类型的数组),因此解决方案看起来略有不同,但不会太多:
var relatedCodes = new int[2] { 2, 4 };
var joinedCodes = from ac in AllCodes
join rc in relatedCodes on ac.Id equals rc
select ac;
原始回答
一种可能性是使用join:
void Main()
{
var AllCodes = new List<Code>()
{
new Code() {Id = 1, Description="Foo1"},
new Code() {Id = 2, Description="Bar2"},
new Code() {Id = 3, Description="Foo3"},
new Code() {Id = 4, Description="Bar4"}
};
var relatedCodes = new Code[2]
{
new Code() {Id = 2, Description="Bar2"},
new Code() {Id = 4, Description="Bar4"}
};
var joinedCodes = from ac in AllCodes
join rc in relatedCodes on ac.Id equals rc.Id
select ac;
joinedCodes.Dump();
}
// Define other methods and classes here
public class Code{
public int Id { get; set; }
public string Description { get; set; }
}
输出继电器: