Error: “Cannot implicitly convert type”
Error: “Cannot implicitly convert type”
我正在做一个项目,我对转换类型有疑问。我想为我的项目创建简单的搜索,但它无法 return 结果显示此消息:
Error 1 Cannot implicitly convert type 'System.Collections.Generic.List' to 'EmployeeDataAccess.TimeWorkMonthly'
public TimeWorkMonthly Get(int id)
{
using (EmployeeDbEntities Entities = new EmployeeDbEntities())
{
List<TimeWorkMonthly> persons = new List<TimeWorkMonthly>();
var result = Entities.TimeWorkMonthlies
.Where(e => e.KartNo == id)
.Select(e => e)
.ToList();
return result.ToList();
}
}
你的方法的return类型是TimeWorkMonthlies
但是在方法体内returnList<TimeWorkMonthlies>
你应该
- 将您的方法 return 类型更改为
IEnumerable<TimeWorkMonthlies>
(您可以使用 List<TimeWorkMonthlies>
但出于多种原因,使用接口来抽象集合类型更好)
- 使用
FirstOrDefault
、First
、SingleOrDefault
或 Single
extension methods of IEnumerable 如果您的目标是 return 只有 元素,除了第一个元素你什么都不关心
哪种方法更好取决于您的数据和搜索条件 - 即 您是否希望此 ID
是唯一的。
从你的语义来看,你似乎在做某种类似于 ID 查找的 repository,所以我猜是解决方案 2) 并使用 Single
或 SingleOrDefault
如果 ID
未找到任何内容,最后的选择是您希望程序如何运行
- 如果您想要例外,请使用
Single
- 如果你想要
null
使用 SingleOrDefault
总而言之,您只需将最后一行代码更改为
return result.Single();
(当然,您不需要在此之前调用 ToList()
)
您的方法签名表明您只想 return 一个 object。但是您正在 returning 一个 object 的列表。当您只想 return 一个 object 时,使用 .ToList()
是不合适的。有四种合适的扩展方式:
First - 将 return 来自 collection 的第一项,如果 collection 为空则抛出异常。
FirstOrDefault - 将 return 作为 collection 中的第一项,如果 collection 为空,则为默认类型。
Single - 如果 collection 中有一项,它将 return 它。如果 collection 中没有项目,则会抛出异常。如果 collection 中有多个项目,则抛出异常。
SingleOrDefault - 如果 collection 中有一项,它将 return 它。如果 collection 中没有项目,它将 return 该类型的默认值。如果 collection 中有多个项目,它将抛出异常。
由于您是按 ID 搜索的,因此您可能永远不会期望匹配两个或更多元素。这样就排除了 First
和 FirstOrDefault
。如果没有找到具有匹配 ID 的项目,您应该根据您希望的行为使用 Single
或 SingleOrDefault
。
public TimeWorkMonthly Get(int id)
{
using (EmployeeDbEntities Entities = new EmployeeDbEntities())
{
var result = Entities.TimeWorkMonthlies.Where(e => e.KartNo == id).Single();
return result;
}
}
请注意,我删除了 persons
变量,因为您从未对它进行任何操作。而且您对 .Select
扩展方法的使用是多余的,因为您刚刚选择了相同的 object 已经被迭代了。 Select
适用于您想要转换 object.
问题只出在你的问题上。如果你想用 Tolist() 函数转换它,你必须改变你的 qry
像这样
public TimeWorkMonthly Get(int id)
{
using (EmployeeDbEntities Entities = new EmployeeDbEntities())
{
var result = from x in Entities.TimeWorkMonthlies
Where x.KartNo == id
Select x;
return result.ToList();
}
}
您现在可以通过tolist()
将其转换为列表,并根据您的需要使用它。
我正在做一个项目,我对转换类型有疑问。我想为我的项目创建简单的搜索,但它无法 return 结果显示此消息:
Error 1 Cannot implicitly convert type 'System.Collections.Generic.List' to 'EmployeeDataAccess.TimeWorkMonthly'
public TimeWorkMonthly Get(int id)
{
using (EmployeeDbEntities Entities = new EmployeeDbEntities())
{
List<TimeWorkMonthly> persons = new List<TimeWorkMonthly>();
var result = Entities.TimeWorkMonthlies
.Where(e => e.KartNo == id)
.Select(e => e)
.ToList();
return result.ToList();
}
}
你的方法的return类型是TimeWorkMonthlies
但是在方法体内returnList<TimeWorkMonthlies>
你应该
- 将您的方法 return 类型更改为
IEnumerable<TimeWorkMonthlies>
(您可以使用List<TimeWorkMonthlies>
但出于多种原因,使用接口来抽象集合类型更好) - 使用
FirstOrDefault
、First
、SingleOrDefault
或Single
extension methods of IEnumerable 如果您的目标是 return 只有 元素,除了第一个元素你什么都不关心
哪种方法更好取决于您的数据和搜索条件 - 即 您是否希望此 ID
是唯一的。
从你的语义来看,你似乎在做某种类似于 ID 查找的 repository,所以我猜是解决方案 2) 并使用 Single
或 SingleOrDefault
如果 ID
- 如果您想要例外,请使用
Single
- 如果你想要
null
使用SingleOrDefault
总而言之,您只需将最后一行代码更改为
return result.Single();
(当然,您不需要在此之前调用 ToList()
)
您的方法签名表明您只想 return 一个 object。但是您正在 returning 一个 object 的列表。当您只想 return 一个 object 时,使用 .ToList()
是不合适的。有四种合适的扩展方式:
First - 将 return 来自 collection 的第一项,如果 collection 为空则抛出异常。
FirstOrDefault - 将 return 作为 collection 中的第一项,如果 collection 为空,则为默认类型。
Single - 如果 collection 中有一项,它将 return 它。如果 collection 中没有项目,则会抛出异常。如果 collection 中有多个项目,则抛出异常。
SingleOrDefault - 如果 collection 中有一项,它将 return 它。如果 collection 中没有项目,它将 return 该类型的默认值。如果 collection 中有多个项目,它将抛出异常。
由于您是按 ID 搜索的,因此您可能永远不会期望匹配两个或更多元素。这样就排除了 First
和 FirstOrDefault
。如果没有找到具有匹配 ID 的项目,您应该根据您希望的行为使用 Single
或 SingleOrDefault
。
public TimeWorkMonthly Get(int id)
{
using (EmployeeDbEntities Entities = new EmployeeDbEntities())
{
var result = Entities.TimeWorkMonthlies.Where(e => e.KartNo == id).Single();
return result;
}
}
请注意,我删除了 persons
变量,因为您从未对它进行任何操作。而且您对 .Select
扩展方法的使用是多余的,因为您刚刚选择了相同的 object 已经被迭代了。 Select
适用于您想要转换 object.
问题只出在你的问题上。如果你想用 Tolist() 函数转换它,你必须改变你的 qry
像这样
public TimeWorkMonthly Get(int id)
{
using (EmployeeDbEntities Entities = new EmployeeDbEntities())
{
var result = from x in Entities.TimeWorkMonthlies
Where x.KartNo == id
Select x;
return result.ToList();
}
}
您现在可以通过tolist()
将其转换为列表,并根据您的需要使用它。