【问题标题】:How to select all from array1 which contains the id from array2?如何从array1中选择所有包含来自array2的id?
【发布时间】:2016-12-01 23:28:11
【问题描述】:

我有一个包含 Contain() 方法的 linq 语句。我正在使用它,以便我可以从 name 不为 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);
}

结果是:

["True","False","True"]

如果我不使用 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"
]

【问题讨论】:

    标签: c# linq


    【解决方案1】:

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

    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))
    

    【讨论】:

    • 天哪,我现在觉得很傻,谢谢你的解释:)
    • 唯一愚蠢的问题是,什么没有被问到!您的好!
    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2021-09-03
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    相关资源
    最近更新 更多