Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义数组使用linq比较或查找其他数组中不存在的值_C#_Arrays_Linq - Fatal编程技术网

C# 自定义数组使用linq比较或查找其他数组中不存在的值

C# 自定义数组使用linq比较或查找其他数组中不存在的值,c#,arrays,linq,C#,Arrays,Linq,我有两个自定义类 受益人的责任和 受益人尾部 两者都有密钥Id和别名字段 我想在Linq查询的帮助下,找出第一类(即受益人响应)中缺少的值,该值在受益人详细信息中不存在。 受益人回复有30个参数,受益人回复有20个参数,我希望受益人回复中缺少10个参数 public class BeneficiaryDetail { public BeneficiaryDetail[] beneInternal { get; set; }

我有两个自定义类

受益人的责任和 受益人尾部 两者都有密钥Id和别名字段

我想在Linq查询的帮助下,找出第一类(即受益人响应)中缺少的值,该值在受益人详细信息中不存在。 受益人回复有30个参数,受益人回复有20个参数,我希望受益人回复中缺少10个参数

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。谢谢你。根据需要修改我的代码及其工作原理。