0

以下のコードを使用すると、ユーザーのリストが表示されます。ページネーションを行うために「テイク」機能をテストしていましたが、うまくいきません。

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つのフォームは異なるため、同じように機能することを期待しないでください。次のように、関数チェーンの2番目を表現できます。

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

IEnumerable<string>これは、予想どおり、最初のフォームがを返すときにを返すため、最初のフォームのようには機能しません。List<User>

于 2013-02-25T14:18:53.780 に答える
2

最初の式はUsersのリストを返します。

2番目の式はsのリストを返しますName(名前はおそらく文字列です)。

あなたはおそらく次のようなことをするべきです:

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 人のユーザーのリストを取得するか、最初の 10 人の名前のリストを取得してみてくださいmyContainer.User.Take(10).Select(iter => iter.Name).ToList()

于 2013-02-25T14:26:15.113 に答える