0

StudentLINQクエリ演算子を使用して、クラスを作成し、名前が姓の前にアルファベット順にある場合にのみ配列から生徒を選択するメソッドを作成するタスクがあります。私はStudentクラスを書きました:

public class Student
{
     private string firstName;
     private string familyName;
     private int age;

    public Student(string firstName, string familyName, int age)
        : this()
    {
        this.firstName = firstName;
        this.familyName = familyName;
        this.age = age;
    }

    public Student()
    {
        firstName = "Dancho";
        familyName = "Mastikata";
        age = 24;
        this.firstName = firstName;
        this.familyName = familyName;
        this.age = age;
    }

    public string FirstName
    {
        get { return firstName; }
        set { firstName = value; }
    }

    public string FamilyName
    {
        get { return familyName; }
        set { familyName = value; }
    }

    public int Age
    {
        get { return age; }
        set { age = value; }
    }
}

そして、私はこれをコーディングしました:

public class StudentsManipulations
{
    static void Main()
    {
        Student[] students = new Student[6]{new Student("Georgi", "Milanov", 21      ),
                                            new Student("Ilko", "Pirgov", 30         ),
                                            new Student("Neboisha", "Yelenkovich", 34),
                                            new Student("Dimitar", "Berbatov", 32    ),
                                            new Student(                             ),
                                            new Student("Nikolai", "Bodurov", 24     )};

    }

    public static List<Student> StudentSortByFirstName(Student[] students)
    {
        List<Student> sortedStudents = from student in students 
             where student.FirstName.CompareTo(student.FamilyName) < 0 
             select student;

        return sortedStudents;
    } 
}            

残念ながら、whereキーワードにエラーがあり、完全には理解できません。

タイプ「System.Collections.Generic.IEnumerable」を「System.Collections.Generic.List」に暗黙的に変換することはできません。明示的な変換が存在します(キャストがありませんか?)。

何が間違っているのか理解するのを手伝ってくれませんか。

4

6 に答える 6

9

メソッドを使用ToList()して結果を列挙し、リストに入れます。

var query = from student in students
            where student.FirstName.CompareTo(student.FamilyName) < 0
            select student;

List<Student> sortedStudents = query.ToList();

または1つのステートメントで:

List<Student> sortedStudents = (from student in students
                                where student.FirstName.CompareTo(student.FamilyName) < 0
                                select student).ToList();
于 2013-03-12T13:28:56.800 に答える
3

エラーは、流暢なLinqが期待どおりIEnumerable<Student>ではなくを返していることを意味します。List<Student>追加の呼び出しが必要になる.ToList()か、代わりに使用できますIEnumerable<Student>

于 2013-03-12T13:29:44.897 に答える
2

linq式をリストに変換する必要があります。

List<Student> sortedStudents = (from student in students 
where student.FirstName.CompareTo(student.FamilyName) < 0 select student).ToList();
于 2013-03-12T13:29:13.490 に答える
2

このクエリ、

from student in students 
where student.FirstName.CompareTo(student.FamilyName) < 0 
select student

を返しますIEnumerable<Student>

が必要な場合は、結果List<Student>を呼び出す必要があります:ToList()IEnumerable<Student>

List<Student> sortedStudents = 
    (from student in students 
     where student.FirstName.CompareTo(student.FamilyName) < 0 
     select student)
    .ToList();

原則として、LINQクエリは結果が列挙されるときに評価され、前には評価されないことに注意してください(これは「遅延実行」または「遅延読み込み」と呼ばれます)。ただし、を呼び出すToList()と、クエリがすぐに実行され、結果が列挙され、リストに入力されます。

于 2013-03-12T13:30:51.153 に答える
1

.ToList()ステートメントの最後に 追加する必要があります。

これにより、Enumerableがリストに変換されます

于 2013-03-12T13:29:04.763 に答える
1

クエリに.ToList()を追加します。

List<Student> sortedStudents = (from student in students where student.FirstName.CompareTo(student.FamilyName) < 0 select student).Tolist();
于 2013-03-12T13:30:12.417 に答える