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查询并在if语句中将其与和int进行比较?_C#_Linq - Fatal编程技术网

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我不认识你,但是