2

私は ASP.NET MVC (古いバージョン) アプリケーションに取り組んでおり、メジャー コードと学生の姓のアルファに基づいて学生にアドバイザーが割り当てられるフォームがあります。

以下のコードを実装しようとしていますが、&オペレータに赤い落書きが表示されています:

System.Linq.IQueryable<Appointments.Models.MajorAdviserStudentAssignmentByAlpha>エラー: 演算子 '&' は、タイプ ' ' および 'ラムダ式' および 'ラムダ式' のオペランドには適用できません

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;

ここで何が問題なのかを理解するための助けをいただければ幸いです。前もって感謝します!

4

4 に答える 4

5

ここで訂正を追加したいと思います。実際には、&& & C# のブール AND 演算子です ( と一緒に使用した場合bool)。ただし、前者は短絡評価を行います。

の真偽に関係なく結果が得られるため、が評価されないA && B場合を考慮しAてください。falseBfalseB

取得しているエラーについては、おそらく&演算子がブール式とラムダ式 (関数) を比較しているためです。これを試して

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;
于 2013-01-11T01:21:09.073 に答える
1

それは、あなたが探している演算子が&&. このようにLinq式をリファクタリングします

MajorAdviserStudentAssignmentByAlpha 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;
于 2013-01-11T01:16:36.170 に答える
0

括弧を追加しすぎていると思います。これを試して:

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

if (majorAssignmentByAlpha != null)
    return majorAssignmentByAlpha.Adviser;

.Where() は、 を返す単一の式を取りますbool。2 つの異なる表現を組み合わせようとしています。の前の閉じ括弧を削除し&&、2 番目の の後の開き括弧を削除すると、2a =>つのブール ステートメントが機能します。

于 2013-01-11T01:21:45.633 に答える
-1

&&論理AND演算に使用するつもりだったと思います。

FirstOrDefault()も取るFunc<T, bool>ので、次のことができます。

var majorAssignmentByAlpha = FindAllMajorAdviserStudentAssignmentByAlphas().FirstOrDefault(
            a => a.MajorString == student.StudentMajor &&
            (a => ((String.Compare(student.StudentLastName, a.AlphaStart) >= 0) &&
                 (String.Compare(student.StudentLastName, a.AlphaEnd) <= 0));
于 2013-01-11T01:16:28.077 に答える