使用 Linq to object,如何根据同一列表中的另一个字段获取一个字段的值
Using Linq to object, how can I get one field's value based on another in the same list
我有一个 class 定义如下:
public class MyClass
{
public int ID { get; set; }
public string Name { get; set; }
}
然后我有一个逻辑,我构建了一个列表 class:
MyList = new List<MyClass>;
foreach(MyClassData myClass in Service.MyClassList)
{
MyList.Add(new MyClass{ID = myClass.ID, Name = myClass.Name});
}
现在,我需要根据 'Name' 得到一个 'ID'。
我正在尝试以下操作:
int id01 = MyList.Where(x => x.FileName.Equals("File01")).Single(x => x.FileID)
这样做时我收到一条错误消息:
Cannot implicitly convert type 'int' to 'bool'
我如何使用 LINQ 做到这一点?
Single
方法是:
public static TSource Single<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
它得到一个应该 return 布尔值的谓词,但你 return 是一个整数。用于过滤,不用于投影。
您要找的是:
int id01 = MyList.Single(x => x.FileName.Equals("File01")).FileID;
或者更好地使用 SingleOrDefault
:
int id01 = MyList.SingleOrDefault(x => x.FileName.Equals("File01"))?.FileID;
另请查看您是否需要 SingleOrDefault
或 FirstOrDefault
我有一个 class 定义如下:
public class MyClass
{
public int ID { get; set; }
public string Name { get; set; }
}
然后我有一个逻辑,我构建了一个列表 class:
MyList = new List<MyClass>;
foreach(MyClassData myClass in Service.MyClassList)
{
MyList.Add(new MyClass{ID = myClass.ID, Name = myClass.Name});
}
现在,我需要根据 'Name' 得到一个 'ID'。
我正在尝试以下操作:
int id01 = MyList.Where(x => x.FileName.Equals("File01")).Single(x => x.FileID)
这样做时我收到一条错误消息:
Cannot implicitly convert type 'int' to 'bool'
我如何使用 LINQ 做到这一点?
Single
方法是:
public static TSource Single<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate )
它得到一个应该 return 布尔值的谓词,但你 return 是一个整数。用于过滤,不用于投影。
您要找的是:
int id01 = MyList.Single(x => x.FileName.Equals("File01")).FileID;
或者更好地使用 SingleOrDefault
:
int id01 = MyList.SingleOrDefault(x => x.FileName.Equals("File01"))?.FileID;
另请查看您是否需要 SingleOrDefault
或 FirstOrDefault