使用 Linq 反对,我怎样才能获得基于同一列表中另一个字段的值

Posted

技术标签:

【中文标题】使用 Linq 反对,我怎样才能获得基于同一列表中另一个字段的值【英文标题】:Using Linq to object, how can I get one field's value based on another in the same list 【发布时间】:2018-04-20 07:52:48 【问题描述】:

我有一个定义如下的类:

public class MyClass

    public int ID  get; set; 
    public string Name  get; set; 

然后我有一个逻辑来构建该类的列表:

MyList = new List<MyClass>;
foreach(MyClassData myClass in Service.MyClassList)

    MyList.Add(new MyClassID = myClass.ID, Name = myClass.Name);

现在,我需要根据“名称”获取一个“ID”。

我正在尝试以下方法:

int id01 = MyList.Where(x => x.FileName.Equals("File01")).Single(x => x.FileID)

这样做我收到一条错误消息:

无法将类型“int”隐式转换为“bool”

我将如何使用 LINQ 做到这一点?

【问题讨论】:

int id01 = MyList.Where(x => x.FileName.Equals("File01")).Select(x => x.ID).FirstOrDefault();不知道你从哪里得到 FileID(应该只是 ID) 【参考方案1】:

Single 方法是:

public static TSource Single<TSource>(
  this IEnumerable<TSource> source,
  Func<TSource, bool> predicate
)

它得到一个应该返回布尔值的谓词,但你返回的是一个整数。它用于过滤而不是投影。

你要找的是:

int id01 = MyList.Single(x => x.FileName.Equals("File01")).FileID;

或者更好的使用SingleOrDefault:

int id01 = MyList.SingleOrDefault(x => x.FileName.Equals("File01"))?.FileID;

还要看看你想要SingleOrDefault还是FirstOrDefault

【讨论】:

以上是关于使用 Linq 反对,我怎样才能获得基于同一列表中另一个字段的值的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ 将项目移动到列表顶部

用 linq 查找和替换列表的结果

我怎样才能在时间属性中获得现在的时间?

我怎样才能从 react beautiful dnd 中获得组合来处理我的项目?

我怎样才能限制到最后的orderByChild?

对于一些微积分密集型代码,我怎样才能获得最快的迭代?