Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将linq查询结果强制转换为枚举_C#_Linq_Enums_Linq To Objects - Fatal编程技术网

C# 将linq查询结果强制转换为枚举

C# 将linq查询结果强制转换为枚举,c#,linq,enums,linq-to-objects,C#,Linq,Enums,Linq To Objects,我有一张类似物品的清单。此列表中的对象都有一个名为Name的属性和一个名为Mk2Result但属于枚举类型Mk2TestResult的枚举类型 现在,在for循环中,我将查看当前的整数是否作为对象名称存在于列表中: for(...... { // var query = from pin in _pins where pin.Name == i.ToString() select pin.Mk2Result; Mk2

我有一张类似物品的清单。此列表中的对象都有一个名为
Name
的属性和一个名为
Mk2Result
但属于枚举类型
Mk2TestResult
的枚举类型

现在,在for循环中,我将查看当前的整数是否作为对象名称存在于列表中:

for(......
{
//    
    var query = 
        from pin in _pins 
        where pin.Name == i.ToString() 
        select pin.Mk2Result;

    Mk2TestResult result = (Mk2TestResult)query;

    //Do some more stuff
}
但编译器会发出以下消息:

Cannot convert type 'System.Collections.Generic.IEnumerable<DataModels.Mk2TestResult>' to 'DataModels.Mk2TestResult'
无法将类型“System.Collections.Generic.IEnumerable”转换为“DataModels.Mk2TestResult”
如何将查询结果正确返回为枚举类型?

请尝试

Mk2TestResult result = (Mk2TestResult)query.FirstOrDefault();
因为您正试图将列表强制转换为一个对象。
但您将只获得第一个对象。您可以在FirstOrDefault函数参数中使用函数来获取所需的对象。

查询的结果是元素的集合,而不是单个元素。这就是编译器想要告诉你们的。如果要从此集合中获取第一个值,则应使用。如果要叠加
Mk2TestResult
,可以使用。或者,您可以简单地遍历集合,并根据具体的
Mk2TestResult
值执行一些操作。

Linq返回IEnumerable,因此您必须遍历它:

var query = 
    (from pin in _pins 
    where pin.Name == i.ToString() 
    select pin.Mk2Result).ToList();

foreach(var result in query)
  ...

返回的类型是Mk2TestResul的集合,因此需要将其存储在列表、数组或任何实现IEnumerable的对象中

例如:

List<Mk2TestResult> result = query.ToList();
List result=query.ToList();

您试图将Mk2TestResult对象的集合强制转换为一个对象,因此要么获取FirstOrDefault,要么强制转换为IEnumerable

您的查询实际上返回了
枚举类型的集合。如果只需要一个结果,则必须使用
Single
SingleOrDefault
First
FirstOrDefault
扩展方法

注意:如果您认为查询可能不返回结果,请使用名为或default的方法。当调用
Single
First
时,空结果集将导致异常

var query = 
    from pin in _pins 
    where pin.Name == i.ToString() 
    select pin.Mk2Result;

// If pin.Mk2Result is strongly typed, the cast is not necessary
Mk2TestResult result = query.FirstOrDefault();

要向动态linq添加新的枚举类型,必须添加以下代码:

typeof(Enum),
typeof(T)

T : Enum Type.
指向动态的预定义类型属性

那是我的工作