C # как вернуться из запроса linq2sql обратно на главную - PullRequest
2 голосов
/ 22 марта 2012

Я немного поработал с простыми операторами linq2sql, но я новичок в их использовании с классами.Я просто хочу поместить оператор linq в класс обзора и вызвать его из класса 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 ]

2 голосов
/ 22 марта 2012
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 из ComboBox:

  cboEmployee.DataSource = r.getEmp();
2 голосов
/ 22 марта 2012

В этом случае тип возвращаемого значения должен быть 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, поэтому он будет виден вызывающему классу. Или просто определите метод getEmp в классе frmMain, а не в классе Review. Вам вообще нужен класс по обзору?

Первый фрагмент выше присваивает возвращаемое значение другой локальной переменной (которую я назвал newDataSource, чтобы уменьшить вероятность путаницы), а затем присваивает значение этой переменной cboEmployee.DataSource. Второй пример пропускает промежуточное назначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...