linq lambda表达式和'&'运算符

Gre*_*egg 2 c# linq

我正在开发一个ASP.NET MVC(旧版本)应用程序,我有一个表单,根据主要代码和学生姓氏的字母顺序为学生分配顾问.

我正在尝试实现以下代码,但它向&操作员显示红色涂鸦:

错误:运算符'&'不能应用于' System.Linq.IQueryable<Appointments.Models.MajorAdviserStudentAssignmentByAlpha>'和'lambda表达式'和'lambda表达式' 类型的操作数

var majorAssignmentByAlpha = FindAllMajorAdviserStudentAssignmentByAlphas()
    .Where(
           a => a.MajorString == student.StudentMajor) &
           (a => ((String.Compare(student.StudentLastName, a.AlphaStart) >= 0) &
                 (String.Compare(student.StudentLastName, a.AlphaEnd) <= 0))
    .FirstOrDefault());

if (majorAssignmentByAlpha != null)
    return majorAssignmentByAlpha.Adviser;
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助,以了解这里有什么问题.提前致谢!

rex*_*ghk 5

我想在这里补充修正:其实两者&& & 在C#中的布尔操作符(与使用时bool).然而,前者将进行短路评估:

考虑A && B,如果A是,false那么B将不会被评估,因为结果将是false无论什么是真实性B.

对于你得到的错误,可能是因为你的&运算符正在比较一个布尔表达式和一个lambda表达式(函数).试试这个

MajorAdviserStudentAssignmentByAlpha majorAssignmentByAlpha = FindAllMajorAdviserStudentAssignmentByAlphas().FirstOrDefault(
        a => a.MajorString == student.StudentMajor & String.Compare(student.StudentLastName, a.AlphaStart) >= 0 &
             String.Compare(student.StudentLastName, a.AlphaEnd) <= 0);

    if (majorAssignmentByAlpha != null)
        return majorAssignmentByAlpha.Adviser;
Run Code Online (Sandbox Code Playgroud)

  • 考虑翻转答案的位置和补充说明. (2认同)