作者:cws401_712 | 来源:互联网 | 2023-10-11 11:32
我想从数据库中获取用户列表,但我只希望5列而不是全部(它大约有35列).当我编写如下代码时,它在编译时没有显示错误,但在运行时显示了错误.bksb_Users是数据库中的表名以及实
我想从数据库中获取用户列表,但我只希望5列而不是全部(它大约有35列).当我编写如下代码时,它在编译时没有显示错误,但在运行时显示了错误.
bksb_Users是数据库中的表名以及实体模型中的对象名.
public List SearchStudents(string reference, string firstname, string lastname)
{
return (from u in context.bksb_Users
where u.userName.Contains(reference)
&& u.FirstName.Contains(firstname)
&& u.LastName.Contains(lastname)
orderby u.FirstName, u.LastName
select new bksb_Users
{
user_id = u.user_id,
userName = u.userName,
FirstName = u.FirstName,
LastName = u.LastName,
DOB = u.DOB
}).Take(100).ToList();
}
错误是…
The entity or complex type 'bksbModel.bksb_Users' cannot be constructed in a LINQ to Entities query.
解决方法:
以下工作吗?
public List SearchStudents(string reference, string firstname, string lastname)
{
var anon = (from u in context.bksb_Users
where u.userName.Contains(reference)
&& u.FirstName.Contains(firstname)
&& u.LastName.Contains(lastname)
orderby u.FirstName, u.LastName
select new
{
user_id = u.user_id,
userName = u.userName,
FirstName = u.FirstName,
LastName = u.LastName,
DOB = u.DOB
}).Take(100).ToList();
return anon.Select(z => new bksb_Users()
{
user_id = z.user_id, userName = z.userName, FirstName = z.FirstName, DOB = z.DOB
}).ToList();
}
我所做的只是将任务分为两个步骤:
>使用LINQ to Entities获取数据(转换为匿名类型).
>使用LINQ将匿名类型转换为所需类型
对象.
请注意,更好的选择是创建一个仅包含所需字段/属性的新类型(类),这将消除对步骤2的需要,并使函数的调用者可以清楚地知道“填充”了哪些列而且不是.这也意味着您不太可能“偶然地”尝试将这些人口较少的实体持久化回数据库.