我正在尝试连接表中的两个字段并将其指定为列表。请参阅下面的代码
public List<ForDropDownList> GetAccountsForDownList()
{
var accountList = new List<ForDropDownList>();
using (_context = new ApplicationContext())
{
accountList.AddRange( _context.Account
.Select(a => new
{
a.AccountId,
FullName = string.Concat(a.FirstName, a.LastName)
}));
}
return accountList;
}
这是我的模特
public class ForDropDownList
{
public int AccountId { get; set; }
public string FullName { get; set; }
}
我收到此错误:
参数类型System.Linq.IQueryable&lt; {AccountId:int,FullName:string}&gt;不能分配给参数类型Systems.Collection.Generic.IEnumerable
答案 0 :(得分:1)
您最好使用强类型而不是&#34; new {}&#34;匿名类型。例如:
accountList.AddRange(_context.Account.Select(a => new ForDropDownList { AccountId = a.AccountId, FullName = string.Concat(a.FirstName, a.LastName) }));
C#不能将匿名类型转换为强类型。 FYI。
答案 1 :(得分:1)
您应该如下更改您的预测,并在结尾处致电ToList
:
_context.Account
.Select(a => new ForDropDownList
{
a.AccountId,
FullName = string.Concat(a.FirstName, a.LastName)
}).ToList()
需要进行这些更改,因为:
ForDropDownList
投影,我们会创建具有与ForDropDownList
相同属性的匿名类型的实例。由于我们投影的对象类型不是ForDropDownList
,因此我们将结果集合添加到ForDropDownList
个对象的集合中(AddRange
...)ToList()
来强制执行查询并将结果存入内存。 AddRange
期待一个集合。另一方面,您刚刚定义了查询,但您没有请求执行。因此它不能用作AddRange
方法的参数。答案 2 :(得分:1)
基本上,您的选择会设置一个新的动态对象,然后您无法添加到List<ForDropDownList>
以下代码应该可以工作:
accountList.AddRange(_context.Account.Select(a => new ForDropDownList { AccountId = a.AccountId, FullName = string.Concat(a.FirstName, a.LastName) }));