C#如何从linq2sql查询返回main

时间:2012-03-21 21:20:23

标签: 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 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;
        }
    }
}

2 个答案:

答案 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是在一个类中定义的,而不是调用它的类,所以它必须是internalpublic所以它对调用类是可见的。或者,只需在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