2012-07-03 2 views
1

У меня есть две таблицыLINQ к SQL: проблема с Linq запрос

EmpInf 
    EmpId, 
    EmpName, 
    Salary, 
    DepartNumber. 

Dept 
    DeptNo, 
    Deptname, 

У меня также есть listview1 и dropdownlist1, который связан с EmpInf.EmpName

При прохождении конкретного запроса

FilterControl.DataClasses1DataContext obj = new DataClasses1DataContext(); 
protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e) 
{ 
    var a = from r in obj.EmpInfs join s in obj.Dept1s on r.DeptNumber equals s.DeptNo where r.EmpName == "'" + DropDownList1.SelectedValue + "'" select s; 

    ListView1.DataSource = a; 
    ListView1.DataBind(); 
} 

Всякий раз, когда я выбираю конкретное имя из выпадающего списка, он возвращает Данных не было. Какой конкретный код мне не хватает или есть ли другая ошибка?

+0

Где он показывает «Данных не возвращено»? На странице или это ошибка, которую вы получаете? –

+0

во время выполнения. –

+0

ОК, но где это сообщение показано? На странице или это ошибка? –

ответ

1

Положите контрольную точку в SelectedIndexChanged1 и изучите значение SelectedValue, чтобы убедиться, что у DropDownList1.SelectedValue есть имя сотрудника. Вы также можете попробовать DropDownList1.SelectedText.

string selected = DropDownList1.SelectedValue.ToString(); 

// e = employee | d = department 
var query = 
      from e in obj.EmpInfs 
      join d in obj.Dept1s on e.DeptNumber equals d.DeptNo 
      where e.EmpName == "'" + DropDownList1.SelectedValue + "'" 
      select d; 

Изменить эту строку:

where e.EmpName == "'" + DropDownList1.SelectedValue + "'" 

к этому один:

where e.EmpName == selected 

ОК, моя последняя попытка здесь ... Сделайте это до привязки данных:

ListView1.DataSource = query.ToList(); 
+0

Сэр. Я хочу выбрать название отдела как DeptName при выборе конкретного имени сотрудника как EmpInf из раскрывающегося списка. –

+0

OK ... извините за замешательство. Будет соответствующим образом адаптировать код. –

+0

сэр, уже проверил, что часть точки останова, но никакой помощи, ошибка продолжает сохраняться. –

0

Скорее всего, проблема здесь в том, что вы добавили е апострофы по критериям поиска в вашем Где раздел:

var a = from r in obj.EmpInfs 
     join s in obj.Dept1s on r.DeptNumber equals s.DeptNo 
     where r.EmpName == "'" + DropDownList1.SelectedValue + "'" 
     select s; 

Предполагая DropDownList1.SelectedValue является «Смит», то ваш генерируемый SQL будет вдоль линий:

SELECT * 
FROM <tables> 
WHERE EmpName = ''Smith'' 

Обратите внимание, что двойные одиночные кавычки , Чтобы дважды проверить это, поместите контрольную точку после создания запроса и затем вызовите .ToString(), чтобы получить эквивалентный TSQL. Чтобы исправить это, удалите «» из вашего запроса LINQ, поскольку он будет автоматически добавлен для строковых параметров:

var a = from r in obj.EmpInfs 
     join s in obj.Dept1s on r.DeptNumber equals s.DeptNo 
     where r.EmpName == DropDownList1.SelectedValue 
     select s; 
Смежные вопросы