在下面的代码中返回列表:
public List<Customer> GeAllCust()
{
var results = db.Customers
.Select(x => new { x.CustName, x.CustEmail, x.CustAddress, x.CustContactNo })
.ToList()
return results;
}
我收到一个错误报告,指出C#无法转换列表:
错误:无法将类型隐式转换
System.Collections.Generic.List<AnonymousType#1>
为System.Collections.Generic.List<WebApplication2.Customer>
这是为什么?
这是一个屏幕快照,显示了Visual Studio在错误提示中提供的一些其他信息:
返回某些列而不是整个表的正确方法是...吗?
public object GeAllCust()
{
var results = db.Customers.Select(x => new { x.CustName, x.CustEmail, x.CustAddress, x.CustContactNo }).ToList();
return results;
}
当您查看代码时:
x => new { ... }
这将创建一个新的匿名类型。如果您不需要仅拉回一组特定的列,则可以执行以下操作:
return db.Customers.ToList();
假设这Customers
是个IEnumerable<Customer>
,应与您要返回的内容相匹配。
编辑
您已经注意到,您只想返回某些列的子集。如果在编码时需要任何类型的编译器帮助,则需要创建一个自定义类来保存值:
public class CustomerMinInfo
{
public string Name { get; set; }
public string Email { get; set; }
public string Address { get; set; }
public int? ContactNumber { get; set; }
}
然后将您的功能更改为以下内容:
public List<CustomerMinInfo> GetAllCust()
{
var results = db.Customers.Select(x => new CustomerMinInfo()
{
Name = x.CustName,
Email = x.Email,
Address = x.Address,
ContactNumber = x.CustContactNo
})
.ToList();
return results;
}
这将起作用,但是,您将失去与数据库上下文的所有关系。这意味着,如果您更新返回的值,则不会将其重新粘贴到数据库中。
同样,仅重复我的评论,返回更多列(字节数组除外)并不一定意味着更长的执行时间。返回很多行意味着更多的执行时间。您的函数将返回数据库中的每个客户,随着系统的增长,即使列数减少了,该客户也将开始挂起程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句