【问题标题】:How to select name corresponding the id using LINQ如何使用 LINQ 选择与 id 对应的名称
【发布时间】:2016-12-26 13:25:34
【问题描述】:

我有一个类 points.cs,它有成员:

  public class Points
    {
        public int Id = 0;
        public string Name { get; set; }
    }


I have a list of these points like this `List<Points> list= new List<Points>();`

现在这个列表对象包含数据:

列表:

 Id    Name
  1    abc
  2    def
  3    ghi
  4    jkl

我要做的是使用来自列表对象的 LINQ 查询来获取与我的代码中提供的 id 号相对应的名称。

我的尝试明显错误的操作系统是:

 string nameFetchedId=list.Select(Name).Where(obj=>obj.Id=2) //result returned will be "def"

请纠正我,我不擅长 LINQ 吗?

【问题讨论】:

  • list.Single(o =&gt; o.Id == 2).Name ?
  • @David 如果列表为空,此代码将抛出异常。
  • @Lepijohnny:正确。并且有多种方法来处理它,这取决于这对被调用的业务逻辑意味着什么。这超出了问题的范围。
  • @David 同意你的观点,这只是一个观察。

标签: c# .net linq select where


【解决方案1】:

您的查询需要:

string name = list.SingleOrDefault(obj => obj.Id == 2)?.Name; // ?. will prevent the code from throwing a null-reference exception and will return null when a point with Id = 2 does not exist

【讨论】:

    【解决方案2】:

    您可能希望使用 lambda 表达式这样问候:

    string strName = list.where( x => x.id == 2).SingleOrDefault()?.Name; 
    

    祝你好运

    【讨论】:

    • 注意空引用。
    【解决方案3】:

    应该是

    string nameFetchedId=list.SingleOrDefault(obj=>obj.Id==2)?.Name;
    

    首先你找到你的对象,然后选择它的名字:)

    【讨论】:

      【解决方案4】:

      选择第一个满足条件的返回 null 如果没有找到

      list.SingleOrDefault(obj=>obj.Id == 2); 
      list.FirstOrDefault(obj=>obj.Id == 2);
      

      在 c# 6 中使用,因此您不必检查是否找到项目

      list.SingleOrDefault(obj=>obj.Id == 2)?.Name; 
      list.FirstOrDefault(obj=>obj.Id == 2)?.Name;
      

      这将返回 null 或 Name 值。

      选择第一个满足条件的如果没有找到则抛出异常

      list.Single(obj=>obj.Id == 2);
      list.First(obj=>obj.Id == 2);
      

      有了这个就可以安全使用了 list.Single(obj=>obj.Id == 2).Name; list.First(obj=>obj.Id == 2).Name; 除非 Name 为 null 只是一个例外,否则您不会得到 null。

      如果您使用某种 LINQ 到数据服务器(EF、NH、Mongo),则某些解决方案的行为会与在内存中查询时有所不同 有关 Single vs First 的更多信息,请查看LINQ Single vs First

      【讨论】:

        猜你喜欢
        • 2021-09-17
        • 2020-03-19
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 2014-05-02
        • 2013-10-26
        相关资源
        最近更新 更多