linq クエリに where 句を「動的に」追加する方法の例を見つけましたが、特定のクエリで機能させる方法がわかりません。
ここに1 つの例を示します。ここに別の例を示します。ここで、私が持っているクエリを見てみましょう:
var result = (from EventLogEntry elog in el.Entries
where (elog.InstanceId == 4107)
orderby elog.TimeGenerated descending
select elog).ToList();
var query = from EventLogEntry elog in el.Entries
orderby elog.TimeGenerated descending
select elog;
最初の例はハードコーディングされた を示していInstanceID == 4107
ますが、さらに where 句を追加できるようにしたいと考えています。私が見たすべての例は、次のように言っています。
query = query.Where(el.Entries => el.Entries.Message.Contains("error"));
またはそのようなもの。しかし、私のクエリは「ソース」を EventLogEntry オブジェクトとして定義するように設定しているため、where 句を拡張しようとすると、where を実行したいフィールドが認識されません....
これについて何か助けはありますか?
これは私が追加しようとしたものであり、インテリセンスはそれを認識しません:
if (!String.IsNullOrEmpty(sc.Message))
query = query.Where(elog.Message.Contains(sc.Message));
更新されました (これは作業バージョンです):
var query = from EventLogEntry elog in el.Entries select elog;
try
{
if (!String.IsNullOrEmpty(sc.Message))
query = query.Where(elog => elog.Message.Contains(sc.Message));
query = query.OrderBy(elog => elog.TimeGenerated);
var result = query.ToList();
}
catch
{
throw;
}