1

私は2つのテーブルを持っています

EmpInf
    EmpId,
    EmpName,
    Salary,
    DepartNumber.

Dept
    DeptNo,
    Deptname,

私はまた、にバインドされているlistview1andを持っていますdropdownlist1EmpInf.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();   
}

ドロップダウンリストから特定の名前を選択すると、データが返されませんでした。どの特定のコードが欠落しているか、または他のエラーがありますか?

4

2 に答える 2

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

OK、ここでの最後の試み...データバインディングの前にこれを行います:

ListView1.DataSource = query.ToList();
于 2012-07-03T12:41:02.263 に答える
0

ほとんどの場合、ここでの問題は、Where 句の検索条件に一重引用符を追加したことにあります。

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 が「Smith」であると仮定すると、生成された 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;
于 2012-07-03T14:53:01.453 に答える