使用 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 反对,我怎样才能获得基于同一列表中另一个字段的值的主要内容,如果未能解决你的问题,请参考以下文章