0

我有下面的代码,应该会给我带来一个用户列表。我正在测试“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 表达式转换为类型‘字符串’,因为它不是委托类型”

4

3 回答 3

3

不要指望这 2 种形式的工作方式相同,因为它们是不同的。你可以像这样表达函数链中的第二个:

var foo = myContainer.User.Select(u => u.Name).Take(10);

正如预期的那样,它不像第一种形式那样工作,因为它在第一种形式返回IEnumerable<string>时返回List<User>

于 2013-02-25T14:18:53.780 回答
2

第一个表达式返回Users 的列表。

第二个表达式返回一个Names 列表(名称可能是一个字符串)。

您可能应该执行以下操作:

var user = myContainer.User.Where(u => u.Name == Name).Take(10).ToList();

作为旁注,我相信你需要更多的分页,我猜使用 .Skip( something ) .Take( something )

于 2013-02-25T14:19:02.470 回答
2

尝试myContainer.User.Take(10).ToList()获取前 10 个用户myContainer.User.Take(10).Select(iter => iter.Name).ToList()的列表或获取前 10 个名称的列表。

于 2013-02-25T14:26:15.113 回答