C# 我希望其他人向我解释这段代码
我有下面的代码,应该给我一个用户列表。我正在测试“Take”函数来进行分页,但它就是不起作用C# 我希望其他人向我解释这段代码,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我有下面的代码,应该给我一个用户列表。我正在测试“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 gen
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;
}
为什么与第一个如此相似不起作用
Throw exception“无法将Lambda表达式转换为'string'类型,因为它不是委托类型”不要期望这两个表单工作相同,因为它们是不同的。您可以这样表示功能链中的第二个:
var foo = myContainer.User.Select(u => u.Name).Take(10);
正如所料,它不像第一个表单那样工作,因为当第一个表达式返回
列表时,它返回一个IEnumerable
,第一个表达式返回一个用户的列表
第二个表达式返回Name
s的列表(Name可能是一个字符串)
您可能应该这样做:
var user = myContainer.User.Where(u => u.Name == Name).Take(10).ToList();
作为旁注,我认为分页需要多一点,我想使用.Skip(something).Take(something)尝试myContainer.User.Take(10).ToList()
获取前10个用户的列表,或者myContainer.User.Take(10).选择(iter=>iter.Name).ToList()
获取前10个姓名的列表。您到底遇到了什么问题?还不清楚,“不起作用”真的是不够的。。。您解释错误消息了吗?Name
属性的定义是什么?它有一些计算吗?它不是“不工作”,我只是想理解代码。就像上面说的“但是,如果你的动机是“我想让别人向我解释”,那么你可能就没事了。”@IlyaIvanov,正如我在对代码的评论中所说的那样//Name来自User.Name
你可以看到User
是由我的edmxThanks生成的表。正在测试它。=)看起来很有希望(我认为是对的,因为我解释了原因。但是你投了你的票。谢谢你的旁注。真的很有帮助现在它变得有意义了。我只是迷路了,没注意到,谢谢!这真是个好建议。