C# 自定义数组使用linq比较或查找其他数组中不存在的值
我有两个自定义类 受益人的责任和 受益人尾部 两者都有密钥Id和别名字段 我想在Linq查询的帮助下,找出第一类(即受益人响应)中缺少的值,该值在受益人详细信息中不存在。 受益人回复有30个参数,受益人回复有20个参数,我希望受益人回复中缺少10个参数C# 自定义数组使用linq比较或查找其他数组中不存在的值,c#,arrays,linq,C#,Arrays,Linq,我有两个自定义类 受益人的责任和 受益人尾部 两者都有密钥Id和别名字段 我想在Linq查询的帮助下,找出第一类(即受益人响应)中缺少的值,该值在受益人详细信息中不存在。 受益人回复有30个参数,受益人回复有20个参数,我希望受益人回复中缺少10个参数 public class BeneficiaryDetail { public BeneficiaryDetail[] beneInternal { get; set; }
public class BeneficiaryDetail
{
public BeneficiaryDetail[] beneInternal
{
get;
set;
}
public int? Id
{
get;
set;
}
public string AliasName
{
get;
set;
}
}
public class BeneficiaryResponse
{
public int Id
{
get;
set;
}
public string AliasName
{
get;
set;
}
}
现在受益人的责任如下:
[{Id:763886,别名:ABC-3594},
{Id:763759,别名:ABC-6789},
{Id:763661,别名:ABC-9111},
{Id:763668,别名:ABC-9111},
{Id:764467,别名:ABC-3594}]
而受益人则有:
[{Id:763886,别名:ABC-3594},
{Id:763759,别名:ABC-6789},
{Id:764467,别名:ABC-3594}]
如何从受益人响应中获取缺少的其余2个。您可以使用以下linq代码进行输出。
public class BeneficiaryDetail
{
public BeneficiaryDetail[] beneInternal
{
get;
set;
}
public int? Id
{
get;
set;
}
public string AliasName
{
get;
set;
}
}
public class BeneficiaryResponse
{
public int Id
{
get;
set;
}
public string AliasName
{
get;
set;
}
}
它将根据ID参数给出输出。
这可能对你有帮助
var result= (from c in BeneficiaryResponse
where !(from o in BeneficiaryDetail select o.ID).Contains(c.ID)
select c);
或
添加Newtonsoft.Josn dll
public void Main(string[] args)
{
string strBR = "[{ 'Id':763886,'AliasName':'ABC-3594'},{ 'Id':763759,'AliasName':'ABC-6789'},{ 'Id':763661,'AliasName':'ABC-9111'},{ 'Id':763668,'AliasName':'ABC-9111'},{ 'Id':764467,'AliasName':'ABC-3594'}]";
string strBD = " [{'Id':763886,'AliasName':'ABC-3594'},{'Id':763759,'AliasName':'ABC-6789'},{'Id':764467,'AliasName':'ABC-3594'}]";
var resultBR = JsonConvert.DeserializeObject<List<BeneficiaryResponse>>(strBR);
var resultBD = JsonConvert.DeserializeObject<List<BeneficiaryDetail>>(strBD);
var missingData = resultBR.Where(x => !resultBD.Select(n => n.Id).Contains(x.Id)).ToList();
foreach (var item in missingData)
{
Console.WriteLine(item.Id);
}
}
public class BeneficiaryResponse
{
public int Id { get; set; }
public string AliasName { get; set; }
}
public class BeneficiaryDetail
{
public int Id { get; set; }
public string AliasName { get; set; }
}
输出:763661 763668
所以这是LinQ还是反思问题?是否要检测第二个列表中不存在一个对象的位置?在Linq中搜索Google中的Contains,或者您想通过反射从对象中提取一些字段、MethodInfo?我已经尝试使用Except和Sequence,但它不起作用。我只是想要所有这些字段的值,它们不存在于另一个数组中,比如A和B。A有10个值,B有8个值。那么我想要那2个。我同意@Jasper,这还不清楚。这个问题至少需要一些样本数据和预期结果。您对“字段”和“参数”的使用令人困惑。请回答Linq:collection1.Whereitem=>collection2.ContaineSitem.Selectitem=>itemIts working。谢谢你。根据需要修改我的代码及其工作原理。