C# 如何处理这个linq查询并在if语句中将其与和int进行比较?
我有以下代码:C# 如何处理这个linq查询并在if语句中将其与和int进行比较?,c#,linq,C#,Linq,我有以下代码: int selectedcourseId = Convert.ToInt32(c1.Text); var cid = (from g in re.Sections where g.CourseID == selectedcourseId select g.CourseID); int selectedinstructorid = Convert.ToInt32(c2.Text); var iid = (from u in re.Sections where u.Instr
int selectedcourseId = Convert.ToInt32(c1.Text);
var cid = (from g in re.Sections where g.CourseID == selectedcourseId select g.CourseID);
int selectedinstructorid = Convert.ToInt32(c2.Text);
var iid = (from u in re.Sections where u.InstructorID == selectedinstructorid select u.InstructorID);
我想比较if语句中的两个(selectedcourseId)与(cid)以及(selectedStructorId)与(iid),例如:
if (selectedcourseId = cid && selectedinstructorid = iid)
{
MessageBox.Show("it already exists");
}
我尝试过很多不起作用的事情,因为我知识有限。
提前非常感谢您的任何评论或回答您可以将代码更改为:(但您的情况下检查此项是没有意义的) 首先,为了检查if语句中的相等性,必须使用
=
,而不是=
。第二个是IQueryable
允许您对特定数据源执行查询,但它使用延迟执行。要在您的案例中执行它,可以使用First()
但是,我建议您只是在学习如何使用LINQ,因此您已经编写了此代码。
我不知道你想得到什么。但是,如果要搜索是否存在具有该ID的结果,则必须使用any()
:
或者,如果要查找是否有指定了CourseID
和InstructorID
的行,则可以调用一个any()
:
您可以将代码更改为:(但对于您的情况来说,检查此项毫无意义) 首先,为了检查if语句中的相等性,必须使用
=
,而不是=
。第二个是IQueryable
允许您对特定数据源执行查询,但它使用延迟执行。要在您的案例中执行它,可以使用First()
但是,我建议您只是在学习如何使用LINQ,因此您已经编写了此代码。
我不知道你想得到什么。但是,如果要搜索是否存在具有该ID的结果,则必须使用any()
:
或者,如果要查找是否有指定了CourseID
和InstructorID
的行,则可以调用一个any()
:
让我试着从中找到
X
。我想你应该检查一下是否已经有courseid+instructorid的组合。然后使用单个查询:
var data = from section in re.Sections
where section.InstructorID == selectedinstructorid
&& section.CourseID == selectedcourseId
select section;
if(data.Any())
{
MessageBox.Show("it already exists");
}
让我试着从中找到
X
。我想你应该检查一下是否已经有courseid+instructorid的组合。然后使用单个查询:
var data = from section in re.Sections
where section.InstructorID == selectedinstructorid
&& section.CourseID == selectedcourseId
select section;
if(data.Any())
{
MessageBox.Show("it already exists");
}
您不应该在两个查询中执行此操作,因为这两个结果可能与两个不同的行相关。当讲师处理某个部分,并且某个课程有一些讲师,但这两个匹配项不属于同一行时,这将导致“误报”:
course instructor
------ ----------
100 10
101 15
102 20
如果您正在查找组合(101,10)
,仅看到100
存在和10
存在是不够的;您需要检查这两个行是否属于同一行,以便将其视为一个重复。< /P>
您可以通过执行“检查状态”查询来解决此问题,如下所示:
var existing = re.Sections
.Any(s => s.InstructorID == selectedinstructorid && s.CourseID == selectedcourseId);
if (existing) {
MessageBox.Show("it already exists");
}
您不应该在两个查询中执行此操作,因为这两个结果可能与两个不同的行相关。当讲师处理某个部分,并且某个课程有一些讲师,但这两个匹配项不属于同一行时,这将导致“误报”:
course instructor
------ ----------
100 10
101 15
102 20
如果您正在查找组合(101,10)
,仅看到100
存在和10
存在是不够的;您需要检查这两个行是否属于同一行,以便将其视为一个重复。< /P>
您可以通过执行“检查状态”查询来解决此问题,如下所示:
var existing = re.Sections
.Any(s => s.InstructorID == selectedinstructorid && s.CourseID == selectedcourseId);
if (existing) {
MessageBox.Show("it already exists");
}
这将不起作用,因为单个“=”是赋值,而不是比较(即“=”)
另外,你也可以尝试这样做
var cid = (int)((from g in re.Sections where g.CourseID == selectedcourseId select g.CourseID).FirstOrDefault());
因此,您可以从列表中选择第一条或默认记录,并将其强制转换为int
这将不起作用,因为单个“=”是赋值,而不是比较(即“=”)
另外,你也可以尝试这样做
var cid = (int)((from g in re.Sections where g.CourseID == selectedcourseId select g.CourseID).FirstOrDefault());
因此,您从列表中选择第一条或默认记录,并将其强制转换为int在if语句中将
=
更改为=
,我这样做了,但它仍然不起作用,并显示:运算符“==”不能应用于“int”和“System.Linq.IQueryable”类型的操作数@TimSchmelter我对您的Linq查询和实体框架是新手System.Linq.IQueryable对象您可以使用值成员,即iid.Value和cid.Value。但是,它们可以为null(因为它们是可为null的int)。您可以使用HasValue检查值。将if语句中的=
更改为=
,但它仍然不起作用,并显示:运算符“==”不能应用于“int”和“System.Linq.IQueryable”类型的操作数@TimSchmelter我对系统的Linq查询和实体框架不熟悉。Linq.IQueryable对象您可以使用该值成员,即iid值和cid值。但是,它们可以为null(因为它们是可为null的int)。你可以用HasValue检查值。为什么?这是没有意义的比较。它已经是Where()
过滤器的一部分。@r.hamd小心。这几乎肯定没有真正解决你的问题。它刚刚允许它编译。@Phylogenesis我建议他只是在尝试学习如何使用LINQ。下面的要点是:var x=1;如果(x==1){…}
?这正是你正在做的事情。@Phylogenesis我不认识你,但在学习一些新技术时,有些人可能会尝试这样的事情。想象一下,你已经尝试过了,但这不起作用,你找不到问题所在。你会怎么做?为什么?这是没有意义的比较。它已经是Where()
过滤器的一部分。@r.hamd小心。这几乎肯定没有真正解决你的问题。它刚刚允许它编译。@Phylogenesis我建议他只是在尝试学习如何使用LINQ。下面的要点是:var x=1;如果(x==1){…}
?这正是你在做的事情。@Phylogenesis我不认识你,但是