linq whereはIEnumerableに含まれています

//\\ ---- selected items from ChechBoxList
IEnumerable selSender = (from ListItem item in CheckBoxList1.Items.OfType()
                                       where item.Selected
                                       select Convert.ToInt32(item.Value));

//\\ --- linq query
var messages = from m in myEntities.Messages
select new {
m.Id,
m.MessageText,
m.CreatedByUserID
};

私の問題は:私は、データを選択した項目によってCheckBoxList "selSender"から取得する必要があります 私は次のことを試しました:

 RadGrid1.DataSource = messages.Where(m => selSender.Contains(m.CreatedByUserID));

しかし、それは動作していない、エラーメッセージ:

インスタンス引数: 'System.Collections.Generic.IEnumerable'から 'System.Linq.IQueryable'に変換できません

selSender IDに基づいてデータを取得するにはどうすればよいですか?

0
nl ru de

1 答え

Looks like property CreatedByUserID has type of Nullable. You need to use it's value for verifying if selSender contains it:

RadGrid1.DataSource = from m in myEntities.Messages                          
                      where m.CreatedByUserID.HasValue &&
                            selSender.Contains(m.CreatedByUserID.Value)
                      select new { 
                          m.Id,
                          m.MessageText,
                          m.CreatedByUserID 
                      };
0
追加された
@ user1450667 Linqクエリは、クエリの結果を要求するまで(foreachやToListを使用して)実行されません。したがって、あなたの場合、 .Where を適用する前にクエリは実行されません。これは RadGrid.DataSource セッター内でのみ実行されます。
追加された 著者 Sergey Berezovskiy,
私はこれが素晴らしいと思いますが、私の場合、私は試したlinqクエリの外でselSender.Contains(m.CreatedByUserID)を使用する必要があります:RadGrid1.DataSource =メッセージのmesからselSender.Contains(mes.CreatedByUserID)エラーが発生しました:インスタンス引数: 'int []'から 'System.Linq.IQueryable 'に変換できません
追加された 著者 Abady,