Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linq-lambda表达式与'&';操作人员_C#_Linq - Fatal编程技术网

C# linq-lambda表达式与'&';操作人员

C# linq-lambda表达式与'&';操作人员,c#,linq,C#,Linq,我正在开发一个ASP.NETMVC(旧版本)应用程序,我有一个表格,根据学生的主要代码和姓氏字母,为学生分配一名顾问 我试图实现以下代码,但它向&操作员显示红色涂鸦: 错误:运算符“&”不能应用于“System.Linq.IQueryable”和“lambda expression”及“lambda expression”类型的操作数 var majorAssignmentByAlpha=findallmajorasdviser studentassignmentbyalphas() .在哪里(

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

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

错误:运算符“&”不能应用于“
System.Linq.IQueryable
”和“lambda expression”及“lambda expression”类型的操作数

var majorAssignmentByAlpha=findallmajorasdviser studentassignmentbyalphas()
.在哪里(
a=>a.MajorString==student.StudentMajor)&
(a=>((String.Compare(student.StudentLastName,a.AlphaStart)>=0)&

(String.Compare(student.StudentLastName,a.AlphaEnd)我想您是想用
和&
进行逻辑AND运算

FirstOrDefault()
还接受一个
Func
,因此您可以执行以下操作:

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

(String.Compare(student.StudentLastName,a.AlphaEnd)这是因为您正在查找的运算符是
&&
。请像这样重构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;
MajorAdviserStudentAssignmentByAlpha majorAssignmentByAlpha=FindAllMajoRadviserStudentAssignmentByAlpha()。其中(
a=>a.MajorString==student.StudentMajor)&&
(a=>((String.Compare(student.StudentLastName,a.AlphaStart)>=0)&&

(String.Compare(student.StudentLastName,a.AlphaEnd)我想在这里添加一个更正:
&
&
实际上都是C#中的布尔and运算符(当与
bool
一起使用时)。但是前者可以:

考虑
A和
,如果
A
false
,则不会对
B
进行评估,因为无论
B
的真实性如何,结果都将为
false

对于您得到的错误,可能是因为您的
&
运算符正在比较布尔表达式和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;
MajorAdviserStudentAssignmentByAlpha majorAssignmentByAlpha=FindAllMajorAdviserStudentAssignmentByAlpha()。FirstOrDefault(
a=>a.MajorString==student.StudentMajor&String.Compare(student.StudentLastName,a.AlphaStart)>=0&

String.Compare(student.StudentLastName,a.AlphaEnd)我认为您添加了太多的括号。请尝试以下操作:

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;
MajorAdviserStudentAssignmentByAlpha majorAssignmentByAlpha=FindAllMajoRadviserStudentAssignmentByAlpha()。其中(
a=>a.MajorString==student.StudentMajor&&
String.Compare(student.StudentLastName,a.AlphaStart>=0)&

字符串。比较(student.StudentLastName,a.AlphaEnd
,你得到了两个布尔语句,它们都是有效的。

下面的答案说,
&
是按位and运算,
&
是逻辑运算,这是错误的。
&
可以是按位的,也可以是逻辑的,但如果是逻辑的,则总是两边都执行。
&
跳过右边的ha。)如果左半部分为假。虽然这里可能应该使用
&
,但它只会计算第二个操作数的快捷方式。
&
可以是按位的,也可以是逻辑的。@Thevilpenguin:虽然你是对的,但我在OP问题的上下文中回答了,这就是为什么我没有费心提及的原因。对不起,因为代码仍然存在不为我编译我做了一个假设。请参阅我上面的评论。
&
可以是逻辑的,也可以是位的。实际上我同意你的评论,但我认为在这个场景中,他正在寻找这个运算符。或者,我假设这就是你的意思,因为这段代码不会为我编译-它仍在尝试逻辑和bool和lambda.Con在翻转答案和补充说明的位置之后。感谢您的格式编辑:)@rexcfnghk:谢谢!我使用您的代码只是稍微编辑了“a.AlphaEnd”后面的括号,例如:MajorAdviserStudentAssignmentByAlpha majorAssignmentByAlpha=FindAllMajorAdviserStudentAssignmentByAlphas()。FirstOrDefault(a=>a.MajorString==student.StudentMajor&String.Compare(student.StudentLastName,a.AlphaStart)>=0&String.Compare(student.StudentLastName,a.AlphaEnd)啊,是的……有点打字错误。谢谢!谢谢!对不起,我没有格式化我的评论:(你知道我为什么把红色涂鸦改成“FirstOrDefault”()'当我试图实现本次讨论中最后一个'TheevillPenguin'代码时?(错误:'bool'不包含'FirstOrDefault'的定义,并且找不到接受'bool'类型的第一个参数的扩展方法'FirstOrDefault'(是否缺少using指令或程序集引用)。由于某种原因,当我尝试实现您的代码时,它显示了“FirstOrDefault()”的红色涂鸦。(错误:“bool”不包含“FirstOrDefault”的定义,并且找不到接受类型为“bool”的第一个参数的扩展方法“FirstOrDefault”(是否缺少using指令或程序集引用)。很抱歉向您询问此问题,请将涂鸦改为“FirstOrDefault”@Gregg Fixed。很抱歉,它在LINQPad中工作,但我一定是在复制时出错了。我的括号不匹配
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;