以具体数字选择成员

时间:2015-03-26 08:35:02

标签: c# linq

我想选择手机以" 02"开头的特定会员。 我有班级学生 构造函数

public Student(string firstName, string lastName, int fn, int tel, string email, List<int> allMarks, int groupNumber)

制作List<Student> students

而我想要做的就是选择他们的电话开头的成员&#39; 02&#39; (对于我的例子)

我试试这个:

第一

var tel = students.Where(x => x.Tel.ToString().StartsWith("02")).ToArray();
Print(tel);

第二

var testTel = students
.Select(x => x.Tel.ToString().Substring(0, 2) == "02")
.Select(x => x);
Print(testTel);

第三

var someTel =
    from t in students
    where t.Tel.ToString().Substring(0, 2).Equals("02")
    select t.Tel;

还有一些......但最后我将(转换/ int Tel转换为字符串Tel /)并开始工作。

我想问一下,当int Tel列表的一部分时,有没有办法选择这个成员:

List<Student> students = new List<Student>() 
    {
        new Student("Nataly", "Adams", 8222, 029669, "hot@mail.com", 
                new List<int>{2, 3, 3, 5, 6}, 2),
        new Student("Ben", "Dueyn", 8215, 0886996321, "hot@mail.com", 
                new List<int>{4, 5, 4, 5, 5}, 2),
    };

2 个答案:

答案 0 :(得分:2)

tel属性设置为字符串,然后您可以像这样简单地使用lambda表达式:

var tel = students.Where(x => x.Tel.StartsWith("02")).ToList<Student>();

为什么你应该使用带有电话号码的字符串的答案,你可以在这里找到 - Link

答案 1 :(得分:0)

在你的问题的评论中已经说出了最重要的部分。再次迭代:

    当涉及Int32值时,
  • 02等于2。
  • 如果将带有前导0的int值转换为字符串,则前导零将丢失。

获得所需内容的最简单方法是更改​​学生班级,因此电话号码的类型为String。正如Jon Skeets链接的答案一样,这也使您能够存储每个可能的特殊字符,如破折号,连字符,括号等。

所以改变你的课程:

public class Student
{
    public Student(string fname, string lname, int fn, string tel, string mail, List<int> marks, int groupNumber)
    {
        this.firstName = fname;
        this.lastName = lname;
        this.fn = fn;
        this.tel = tel;
        //...
    }
    //...
    public string tel { get; set; }
    //...
}

您可以通过以下方式轻松获得所需内容:

var result = students.Where(x => x.tel.StartsWith("02"));