1

私はLINQに問題があります.私の問題は以下の例に似ています.Historyという名前のテーブルがあり、次のデータがあります.

Method DateUsed

A      2013/02/01
A      2013/01/01
B      2013/01/01
B      2012/01/01 <--
C      2013/01/01
C      2012/02/01

私が望むのは、特定の年に使用されたメソッドの数または数を取得することです。年 = 2013 を取得したい場合、結果は次のようになります。

Method Total 

A       2
B       1 <--
C       3

SQLでは、私のクエリは次のようになります

Select Method, Count(DateUsed) as Total from history 
where YEAR(DateUsed) = '2013' group by Method 

ただし、LINQでそれを行う方法がわかりません。誰かがLINQの同等物を手伝ってくれますか?

前もって感謝します

4

3 に答える 3

1

エンティティに linq を使用している場合は、SqlFunctionsが必要です。

var result = context.History
                    //linq to entities
                    .Where(m => SqlFunctions.DatePart("year", DateUsed) == 2013)
                    //linq to object
                    .Where(m => m.DateUsed.Year == 2013)
                    //common part
                    .GroupBy(m => m.Method)
                    .Select(g => new {
                        Method = g.Key,
                        Total = g.Count()
                    });
于 2013-05-22T14:39:24.577 に答える
1

他の答えは正しいですが、これはLINQクエリ構文を利用するだけです:

var result = 
    from m in context.History
    where m.DateUsed.Year == 2013
    /* or where SqlFunctions.DatePart( "YEAR", m.DateUsed ) == 2013 */
    group m by m.Year into g
    select new { Method = g.Key, Total = g.Count() };

ある状況ではクエリ構文が使いやすく、別の状況では LINQ 拡張メソッドが使いやすいことがわかりました。両方に精通していると役立ちます。

注:テストされていません

于 2013-05-22T14:45:11.867 に答える