C#如何从linq2sql查询返回到main
我使用简单的linq2sql语句已经有一段时间了,但我对在类中使用它们还不熟悉。我只想把linq语句放在review类中,并从frmMain类调用它来填充我的组合框。我知道它应该使用一些属性和下面的代码是非常错误的,但任何帮助将不胜感激。谢谢C#如何从linq2sql查询返回到main,c#,winforms,linq-to-sql,c#-4.0,C#,Winforms,Linq To Sql,C# 4.0,我使用简单的linq2sql语句已经有一段时间了,但我对在类中使用它们还不熟悉。我只想把linq语句放在review类中,并从frmMain类调用它来填充我的组合框。我知道它应该使用一些属性和下面的代码是非常错误的,但任何帮助将不胜感激。谢谢 public partial class frmMain : Form { Review r = new Review(); r.getEmp(); cboEmployee.DataSource = emps } class Re
public partial class frmMain : Form
{
Review r = new Review();
r.getEmp();
cboEmployee.DataSource = emps
}
class Review : frmMain
{
private "return type?" getEmp()
{
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
var emps = (from emp in db.employees
where emp.active == true
orderby emp.name
select emp.name.Substring(0, 20)).ToList();
return emps;
}
}
}
在这种情况下,返回类型应该是
List
或它实现的一个接口
您还需要将返回值分配给调用代码中的某些内容:
Review r = new Review();
var newDataSource = r.getEmp();
cboEmployee.DataSource = newDataSource;
或者干脆
Review r = new Review();
cboEmployee.DataSource = r.getEmp();
通常,方法的返回类型必须是从方法返回的值的类型,或者是该值的超类型。您正在返回ToList()调用的结果,因此方法的返回类型必须与该类型兼容
在调用代码中,您似乎被变量范围弄糊涂了。emps
变量是getEmp方法的局部变量;它在该方法之外不可见
由于getEmp是在调用它的类以外的类中定义的,因此它必须是内部的
或公共的
,以便调用类可以看到它。或者,只需在frmMain类而不是Review类中定义getEmp方法。你一开始就需要复习课吗
上面的第一个代码段将返回值赋给另一个局部变量(我称之为
newDataSource
,以减少混淆的可能性),然后将该变量的值赋给cboEmployee.DataSource
。第二个示例跳过中间赋值。在这种情况下,返回类型应该是List
或它实现的一个接口
private List<string> getEmp()
{
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
var emps = (from emp in db.employees
where emp.active == true
orderby emp.name
select emp.name.Substring(0, 20)).ToList();
return emps;
}
}
您还需要将返回值分配给调用代码中的某些内容:
Review r = new Review();
var newDataSource = r.getEmp();
cboEmployee.DataSource = newDataSource;
或者干脆
Review r = new Review();
cboEmployee.DataSource = r.getEmp();
通常,方法的返回类型必须是从方法返回的值的类型,或者是该值的超类型。您正在返回ToList()调用的结果,因此方法的返回类型必须与该类型兼容
在调用代码中,您似乎被变量范围弄糊涂了。emps
变量是getEmp方法的局部变量;它在该方法之外不可见
由于getEmp是在调用它的类以外的类中定义的,因此它必须是内部的
或公共的
,以便调用类可以看到它。或者,只需在frmMain类而不是Review类中定义getEmp方法。你一开始就需要复习课吗
上面的第一个代码段将返回值赋给另一个局部变量(我称之为
newDataSource
,以减少混淆的可能性),然后将该变量的值赋给cboEmployee.DataSource
。第二个示例跳过了中间作业。谢谢!既然getEmp由于保护级别而不可访问,我该如何实现属性?@adam355将该方法公开(或内部),而不是私有。将其公开不是很糟糕的编程吗?@adam355我刚刚意识到Review继承自frmMain。这似乎很奇怪。你为什么这么做?一个更好的解决方案是将getEmp定义为frmMain的私有方法。这看起来很奇怪,因为我是新来的,正在学习。因此,我没有答案。。哈哈,你能举个例子吗?谢谢!既然getEmp由于保护级别而不可访问,我该如何实现属性?@adam355将该方法公开(或内部),而不是私有。将其公开不是很糟糕的编程吗?@adam355我刚刚意识到Review继承自frmMain。这似乎很奇怪。你为什么这么做?一个更好的解决方案是将getEmp定义为frmMain的私有方法。这看起来很奇怪,因为我是新来的,正在学习。因此,我没有答案。。lol你能举个例子吗?我现在如何使用get和set保持数据私有?@adam355你想保持私有的数据是什么,你在哪里使用get和set?@adam355是的,考虑到你有限的示例,将getEmp作为frmEmp类的私有方法是有意义的。但是,您有时需要使用公共方法!示例中最奇怪的部分是Review继承自frmMain,并且您在frmMain类中创建了一个新的Review实例。我注意到您发布的frmMain示例没有编译,因为其中两行代码需要在方法体中,但不是。@adam355一般来说,您应该将一个类看作只有一个作业(“单一责任原则”)。公共成员应公开该作业的输入和输出。实现细节应该是私有的(像“生成要放入组合框的字符串列表”这样的任务是一个实现细节)。@adam355在您可以添加get/set属性之前,您需要一个具有一些可以获取或设置的值的类。你有这样的课吗?您是否一直在为其创建属性?如果是这样,也许最好再发一个问题。getEmp
方法最好作为一种方法,而不是属性(更惯用的名称应该是GetEmployeeList
,但这是另一回事)。现在如何使用get和set保持数据私有?@adam355您试图保持私有的数据是什么,您在哪里使用get和set?@adam355是,考虑到您有限的示例,将getEmp作为frmEmp类的私有方法是有意义的。但是,您有时需要使用公共方法!示例中最奇怪的部分是Review继承自frmMain,并且您在frmMain类中创建了一个新的Review实例。我注意到您发布的frmMain示例没有编译,因为其中两行代码需要在方法体中,但不是。@adam355一般来说,您应该将一个类看作只有一个作业(“单一责任原则”)。公共成员应公开该作业的输入和输出。实施细节应保密(且
private List<string> getEmp()
{
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
var emps = (from emp in db.employees
where emp.active == true
orderby emp.name
select emp.name.Substring(0, 20)).ToList();
return emps;
}
}