C# 如何从包含array2 id的array1中选择all?

C# 如何从包含array2 id的array1中选择all?,c#,linq,C#,Linq,我有一个包含Contain()方法的linq语句。我使用它是为了可以从名称不为null的数组中选择所有对象,但只能从array1中选择对象array2中包含相同名称的对象 我已设法返回结果,但它在需要对象值的地方显示true或false 代码 var response = JsonConvert.DeserializeObject<FamilyNames>(result); List<object> data = new List<object>(); Cl

我有一个包含Contain()方法的linq语句。我使用它是为了可以从名称不为null的数组中选择所有对象,但只能从array1中选择对象array2中包含相同名称的对象

我已设法返回结果,但它在需要对象值的地方显示true或false

代码

var response = JsonConvert.DeserializeObject<FamilyNames>(result);
List<object> data = new List<object>();

ClassName className = new ClassName();

object [] getNames = className.GetType()
     .GetProperties()
     .Select(p =>
       {
         object value = p.Name;
         return value == null ? null : value.ToString();
       })
         .ToArray();

foreach (var obj in response.items.Where(n => n.name != null).DistinctBy(x => x.name).Select(a => getNames.Contains(a.initialName)))
{
     data.Add(obj);
}
client.Dispose();
return Json(data, JsonRequestBehavior.AllowGet);
}
如果不使用select语句,则会获取对象:

[
  {
    "initalName": "BD",
    "firstName": "Bob",
    "LastName": "Dilan"
  },
  {
    "initalName": "HT",
    "firstName": "Harry", // the initialName doesn't exist in list so need to remove this object
    "LastName": "Thomas"
  },
  {
    "initalName": "LJ",
    "firstName": "Lindsey",
    "LastName": "Jones"
  }
]
getNames数组中不存在initalName,因此需要删除它。任何建议都将不胜感激,尤其是在方法方面。预期的结果将是:

[
      {
        "initalName": "BD",
        "firstName": "Bob",
        "LastName": "Dilan"
      },
      {
        "initalName": "LJ",
        "firstName": "Lindsey",
        "LastName": "Jones"
]

问题是,在这个LINQ表达式中,最后选择一个Bool作为输出。(.Contains()返回布尔值)。 因此,表达式将重新生成布尔列表

response.items
.Where(n => n.name != null)
.DistinctBy(x => x.name)
.Select(a => getNames.Contains(a.initialName))
要获得所需的内容,只需将.Select()替换为.Where(),即可执行预期的过滤并保持原始对象不变,(不会进行任何投影),从而获得预期结果:

response.items
.Where(n => n.name != null)
.DistinctBy(x => x.name)
.Where(a => getNames.Contains(a.initialName))

问题是,在这个LINQ表达式中,最后选择一个Bool作为输出。(.Contains()返回布尔值)。 因此,表达式将重新生成布尔列表

response.items
.Where(n => n.name != null)
.DistinctBy(x => x.name)
.Select(a => getNames.Contains(a.initialName))
要获得所需的内容,只需将.Select()替换为.Where(),即可执行预期的过滤并保持原始对象不变,(不会进行任何投影),从而获得预期结果:

response.items
.Where(n => n.name != null)
.DistinctBy(x => x.name)
.Where(a => getNames.Contains(a.initialName))

哦,亲爱的,我现在觉得自己很傻,谢谢你的解释:)唯一愚蠢的问题是,什么是不问的!祝你好运!哦,亲爱的,我现在觉得自己很傻,谢谢你的解释:)唯一愚蠢的问题是,什么是不问的!祝你好运!