2017-05-30 9 views
2

このコードでは、 'chklstDepartment'は複数の値を持っていますが、最初に選択した項目のみを表示しています。 選択したすべてのチェックボックスリストの値に対してデータをバインドする方法を教えてください。IN節のようにLINQ内の複数のチェックボックスリストの値を比較する方法SQL

List<LessonLearnDetails> objLessonDetails = objLessonDashboard.getLessonLearntDetails(); 
var searchData = objLessonDetails 
    .Where(i => ddlAsset.SelectedValue == "0" || 
       i._Asset.AssetID == ddlAsset.SelectedValue) 
    .Where(i => ddlAuditType.SelectedValue == "0" || 
       i._Audit.AuditTypeID == ddlAuditType.SelectedValue) 
    .Where(i => chklstDepartment.SelectedValue == "0" || 
       i._Department.DepartmentID == chklstDepartment.SelectedValue) 
    .Where(i => ddlStartYear.SelectedItem.Text == "--Select All--" || 
       i._Year.StartYear == ddlStartYear.SelectedItem.Text) 
    .Where(i => ddlEndYear.SelectedItem.Text == "--Select All--" || 
       i._Year.EndYear == ddlEndYear.SelectedItem.Text) 
    .Distinct() 
    .ToList(); 
BindGrid(searchData); 

は私もチェック値を格納するための機能を使用し、合格したことchklstDepartment.Contains()を使用して値が、それはあなたが、文字列が、列挙のを返すべきではありません0

for (int i = 0; i < chklstDepartment.Items.Count; i++) 
{ 
    if (chklstDepartment.Items[i].Selected) 
    { 
     chbstr += chklstDepartment.Items[i].Value + ","; 
     count++; 
     //if(count > 1) 
    } 
    var data = new string[] {chbstr}; 
} 
chbstr = chbstr == string.Empty ? "0" : chbstr; 
//chbstr = chklstDepartment.SelectedValue; 
//chbstr = chbstr.Split(',').ToString(); 
return chbstr; 

答えて

1

を返します文字列。 whereステートメントを変更することができます。

.Where(i => (chklstDepartment.SelectedValue == "0") 
     || (chklstDepartment.Items.Cast<ListItem>() 
            .Where(item => item.Selected) 
            .Select(item => item.Value) 
            .Contains(i._Department.DepartmentID))) 

DepartmentIDintであれば、あなたはこの試みることができる:よう

何か

.Where(i => (chklstDepartment.SelectedValue == "0") 
     || (chklstDepartment.Items.Cast<ListItem>() 
            .Where(item => item.Selected) 
            .Select(item => Convert.ToInt32(item.Value)) 
            .Contains(i._Department.DepartmentID))) 

をあなたが選択をキャッシュ検討するかもしれない:

var selectedIds = chklstDepartment.Items.Cast<ListItem>() 
             .Where(item => item.Selected) 
             .Select(item => Convert.ToInt32(item.Value)) 
             .ToArray(); // or ToList() or HashSet 

.Where(i => (chklstDepartment.SelectedValue == "0") 
     || (selectedIds.Contains(i._Department.DepartmentID))) 
+0

ことがありますスローリーエラーが発生しました。 'Where'の定義が含まれていません... –

+0

おそらく私は '.Value' ..を忘れています。私はそれを更新しました。これは、stackoverflowでタイプされているので、軽微なエラーが含まれている可能性があります。 –

+0

chklstDepartment.Items.Where(item => item.Value) ここで私はエラーが発生しています... –

関連する問題