1

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;
}
4

3 に答える 3

1

.Where()式を取ります:

if (!String.IsNullOrEmpty(sc.Message))
    query = query.Where(elog => elog.Message.Contains(sc.Message));
于 2012-08-28T20:33:40.190 に答える
1

ブール値の結果式を取るだけです。AND、OR、コンパレータ、さらには数式を使用できます。論理演算子を使用して、括弧内の式を拡張するだけです。

于 2012-08-28T20:30:04.450 に答える
0

if を使用しているときと同じように、さらに式を追加できます。

where (elog.InstanceId == 4107 || elog.InstanceId == 4108)
于 2012-08-28T20:33:25.487 に答える