3

次の LINQ クエリがあります。

//myRepository.GetClients(); returns an IQueriable<>
        var AllClients = myRepository.GetClients();


        var ClientReports = from c in FirmECFIs
                         select new ClientReport
                        {
                            FirmSerialNumber = c.SerialNumber,
                            FirmName = c.Name,
                            Year = c.Year,
                            Month = c.Month,
                            CustID = c.CustID,
                            TotalCount =myRepository.GetCount(c.SerialNumber, billingYear, billingMonth),
                            TotalPrice = "0"
                        };

「... SQL への変換がサポートされていません」というエラーが表示されます。TotalCount 列からメソッド呼び出しを削除し、静的な値を割り当てると正常に動作します。どうやら LINQ はメソッド呼び出しを tSQL に変換できません。

誰でもこれで私を助けることができますか?

ありがとう

GetCount() メソッドのソース:

        public int GetCount(int SerialNumber, string billingYear, string billingMonth)
    {
        var Count = CreateDataContext().myView.Where(c => c.SerialNumber == SerialNumber)
            .Where(c => c.Year == Convert.ToInt32(billingYear)).Where(c => c.Month == Convert.ToInt32(billingMonth));
        return Count.ToList().Count;
4

2 に答える 2

3

あなたのリポジトリは、ここではうまく機能していません。実際、非常に漏れやすい抽象化であり、せいぜいあまり役に立たないようです (まだリポジトリの外でクエリを実行しているため)。

1 つのアプローチは、GetClientReportsこの結果を生成するメソッドをリポジトリに導入することです。これが下のLinq to Sqlであると仮定すると、ネストされたクエリを使用するか、そのレベルで結合できます。

于 2012-04-26T21:47:32.797 に答える
2

その行で別の SQL/LINQ クエリを実行できますが、別の C# 関数を呼び出すことはできません。それをSQLに変換することはできません。

于 2012-04-26T21:46:38.107 に答える