2011-10-25 1 views
1

私はいくつかの奇妙な理由から、.Select()の後に.Where()をチェーンできないことを認識しました。コード変数に基づいてLINQで条件文を実行する方法は?

var eventCalendar = db.EventCalendars.Where(q => q.Date == e.Day.Date); 

if (!isLogged) 
{ 
    eventCalendar = eventCalendar.Where(q => q.ClientFlag == true); 
} 
eventCalendar = eventCalendar.Select(q => q.EnvironmentId).Distinct(); 

が、今、私は私が間違っているのは何.Select

"Cannot implicitly convert type 'System.Linq.IQueryable<short>' to 'System.Linq.IQueryable<IT_Portal.EventCalendar>'. An explicit conversion exists (are you missing a cast?)" 

で取得し、エラー?簡単に言えば、特定の環境でイベントが発生した場合にユーザーに通知できるように、カレンダーイベントテーブルから個別の環境IDを取得できます。最後に、ユーザーがログインしていない場合は、クライアント(ClientFlag)に対して表示されるようにマークされたイベントから環境IDのみを取得します。

答えて

1

新しい変数が必要です。

var environmentIDs = eventCalendar.Select(q => q.EnvironmentId).Distinct(); 
+1

<*ここに聖音を挿入する*>ありがとうございました!!! –

0

Select(q => q.EnvironmentId)を選択すると、実際にはeventCalenderObjectではなくEnvironmentIdが選択されます。

2

最後の行が問題です。あなたはそれに割り当てているのとは異なるタイプのローカル変数を再利用しようとしています。あなたはわずかにそれを変更する必要があります。

var eventCalendarEnvironmentIds = 
    eventCalendar.Select(q => q.EnvironmentId).Distinct(); 
0

変更してみてください:

var eventCalendar = db.EventCalendars.Where(q => q.Date == e.Day.Date); 

へ:

// I specify IQueryable, you can use 'var' - you simply need to change the variable name 
IQueryable eventQuery = db.EventCalendars.Where(q => q.Date == e.Day.Date); 

次に、選択:

var eventCalendar = eventQuery.Select(q => q.EnvironmentId).Distinct(); 

を時々、あなたが継続する場合varを使用するには、データ型が見えなくなります。できるだけ頻繁に実際のデータ型を使用する必要があります。 varを使うことの罠に巻き込まれることは、IMOの良い習慣ではありません。

関連する問題