Aya*_*ifa 14 c# linq asp.net entity-framework
在以下代码中返回一个列表:
public List<Customer> GeAllCust()
{
var results = db.Customers
.Select(x => new { x.CustName, x.CustEmail, x.CustAddress, x.CustContactNo })
.ToList()
return results;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误报告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;
}
Run Code Online (Sandbox Code Playgroud)
gun*_*171 20
当你看代码时:
x => new { ... }
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的匿名类型.如果您不需要仅撤回特定的一组列,则可以执行以下操作:
return db.Customers.ToList();
Run Code Online (Sandbox Code Playgroud)
这假设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; }
}
Run Code Online (Sandbox Code Playgroud)
然后将您的功能更改为以下内容:
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;
}
Run Code Online (Sandbox Code Playgroud)
这将起作用,但是,您将失去与数据库上下文的所有关系.这意味着如果更新返回的值,它将不会将其重新粘贴到数据库中.
另外,只是重复我的注释,返回更多列(字节数组除外)并不一定意味着更长的执行时间.返回大量行意味着更多的执行时间.您的功能是返回数据库中的每个客户,当您的系统增长时,即使数量减少,您也将开始挂起您的程序.
您正在选择匿名类型,而不是Customer.
如果你想做(有点)这个,你可以像这样写:
return db.Customers.Select(x => new Customer { Name = x.CustName, Email = x.CustEmail, Address = x.CustAddress, ContactNo = x.ContactNo }).ToList();
Run Code Online (Sandbox Code Playgroud)
这假定Customer对象的属性是我称之为的对象.
**编辑**根据您的评论,
如果要返回表的子集,可以执行以下两项操作之一:
Customer我上面指定的翻译形式,或者:List<ShrunkenCustomer>(假设ShunkenCustomer您为新类选择的名称.)