我有下面的代码应该为我带来一个用户列表。我正在测试" Take"是一个分页的功能,但它不起作用。
using (MyContainer myContainer = new MyContainer())
{
// Works
var user = myContainer.User.Where(u => u.Name == Name).ToList();
// The "Name" comes from User.Name
// myContainer is generated by my edmx he inherits the ObjectContext in the design generated by edmx as it shows below
//// public partial class MyContainer : ObjectContext
// Does not work
var foo = (from t in myContainer.User
select t.Name).Take(10);
return user;
}
为什么与第一个如此相似并不起作用。
抛出异常"无法将Lambda表达式转换为' string'因为它不是委托类型"
答案 0 :(得分:3)
不要指望两种形式的工作方式相同,因为它们不同。你可以像这样在函数链中表达第二个:
var foo = myContainer.User.Select(u => u.Name).Take(10);
正如预期的那样,它不像第一个表单那样工作,因为它在第一个表单返回IEnumerable<string>
时返回List<User>
答案 1 :(得分:2)
第一个表达式返回User
s。
第二个表达式返回Name
的列表(名称可能是一个字符串)。
你应该做的事情如下:
var user = myContainer.User.Where(u => u.Name == Name).Take(10).ToList();
作为旁注,我相信你需要更多的分页,我想使用.Skip(某些东西)。拿(某些东西)
答案 2 :(得分:2)
尝试myContainer.User.Take(10).ToList()
获取前10位用户的列表,或myContainer.User.Take(10).Select(iter => iter.Name).ToList()
获取前10位用户的列表。
答案 3 :(得分:-1)
var user = myContainer.User.Where(u => u.Name == Name).ToList();
和
var foo = (from t in myContainer.User
select t.Name).Take(10);
不是正确的写作方式。如果你没有从任何一个返回任何值,你将得到ArgumentNullException。在调用
之前,首先需要确保至少返回一个值 - 意味着检查为null.ToList()
或
.Take(10)