2017-10-07 2 views
0

私のプロジェクトをMySQLからMongoDBに変換しています。 LinQを使用していくつかのステートメントをMongoDBに変換しています。ここで LinQをC#MongoDBのSQLステートメントから変換します

は私の元の文です:

SELECT COUNT(machinelograwdata.Parameter1) AS 'HideSheetCounter', 
    machinelograwdata.Parameter42 AS 'Orders', 
    machinelograwdata.MachineID 
FROM machinelograwdata 
WHERE EventID = '14' 
    AND CONVERT(Parameter35 , DECIMAL) <> 0 
    AND machinelograwdata.StartTime <= ' strSearchingEndDate + ' 
    AND machinelograwdata.StartTime >= ' strSearchingStartDate + ' 
GROUP BY Parameter42 , machinelograwdata.MachineID 

と私は、次のLINQの構文を試してみて、私はエラーました:

var Temp3 = from c in MachineCollection.AsQueryable() 
     where c.StartTime >= DateTime.Parse(strSearchingStartDate) 
       && c.StartTime <= DateTime.Parse(strSearchingEndDate) 
       && c.EventID == "14" 
       && c.Parameter35 != "0" 
     group c by new { c.Parameter42, c.MachineID } into grps 
     select new 
     { 
      MachineID = grps.Key.MachineID, 
      Orders = grps.Key.Parameter42, 
      HideSheetCounter = grps.Count(x => x.Parameter1) 
     }; 

Visual Studioがselectで問題を提起し、x.Parameter1 x.Parameter1については、エラーを私のPOCOは

[BsonElement("Parameter1")] 
public string Parameter1 
{ 
    get; 
    set; 
} 

コードが間違っていますか?いくつかのヒントを教えてください。 ありがとう

+0

'カウント()'述語(それぞれに 'true'をを返す式を見込ん:あなたは方法あなたのフィールドのnull値を除外述語を提供する必要がありCOUNT(columnName)の同じ動作を模倣する

あなたが数えたい要素)。その部分を削除してください: 'x => x.Parameter1' –

+0

@FedericoDipumaありがとうございます。 しかし、 "x => x.Parameter1"を削除すると、結果は元のStatement Resultと同じになりません。 – ThomasLee

+1

同様の振る舞い( 'Parameter1'の' null'値を無視する)をしたい場合は、 'Count()'の中にその述語を追加してください: 'Count(x => x.Parameter1!= null)' –

答えて

2

Count() methodには、その条件を満たすとカウントする要素ごとにブール値を返す述語が必要です。

grps.Count(x => x.Parameter1 != null) 
関連する問題