我一直在使用简单的linq2sql语句,但我很新用它们与类。我只想将linq语句放在review类中,并从frmMain类中调用它来填充我的组合框。我知道它应该使用一些属性,下面的代码是非常错误的,但任何帮助将不胜感激。感谢
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;
}
}
}
答案 0 :(得分:2)
在这种情况下,返回类型应为List<string>
或其实现的接口之一。
您还需要将返回值分配给调用代码中的某些内容:
Review r = new Review();
var newDataSource = r.getEmp();
cboEmployee.DataSource = newDataSource;
或只是
Review r = new Review();
cboEmployee.DataSource = r.getEmp();
通常,方法的返回类型必须是从方法返回的值的类型,或该值的超类型。您将返回ToList()调用的结果,因此您的方法的返回类型必须与之兼容。
在您的调用代码中,您似乎对变量范围感到困惑。 emps
变量是getEmp方法的局部变量;在那种方法之外是不可见的。
因为getEmp是在一个类中定义的,而不是调用它的类,所以它必须是internal
或public
所以它对调用类是可见的。或者,只需在frmMain类而不是Review类中定义getEmp方法。你甚至首先需要一个评论课吗?
上面的第一个片段将返回值分配给另一个局部变量(我称之为newDataSource
以减少混淆的可能性),然后将该变量的值分配给cboEmployee.DataSource
。第二个样本跳过中间分配。
答案 1 :(得分:2)
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;
}
}
然后设置DataSource
的{{1}}:
ComboBox