我想从数据库中获取用户列表,但我只想要5列而不是所有列(它有大约35列)。当我写下面的内容时,它在编译时显示没有错误,但在运行时显示错误。
bksb_Users是我的数据库中的表名以及实体模型中的对象名。
public List<bksb_Users> 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<bksb_Users>();
}
错误是......
The entity or complex type 'bksbModel.bksb_Users' cannot be constructed in a LINQ to Entities query.
答案 0 :(得分:3)
以下工作吗?
public List<bksb_Users> 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();
}
我所做的就是将任务分成两个步骤:
注意一个更好的选择是创建一个只包含你需要的字段/属性的新类型(类) - 这将消除对第2步的需要,并且会使你的函数的调用者清楚哪些列是'人口稠密',哪些不是。这也意味着您不太可能“意外”尝试将这些半填充的实体保留回数据库。
答案 1 :(得分:0)
由于某种原因,我猜那个字段DOB看起来像这样
public object DOB { get { return fieldX + fieldY } }
实体框架不明白。查询中的所有字段都必须与DB
中的某些列进行映射