LINQ列中的方法调用

时间:2012-04-26 21:41:55

标签: c# sql linq linq-to-sql linq-to-objects

我有以下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;

2 个答案:

答案 0 :(得分:3)

你的存储库并没有真正完成它的工作 - 实际上它似乎是一个非常漏洞的抽象,最多对你没什么帮助(因为你仍然在存储库之外查询)。

一种方法是向您的存储库引入一个方法GetClientReports,为您生成此结果。假设这只是Linq to Sql,你可以使用嵌套查询或在该级别加入。

答案 1 :(得分:2)

您可以在该行中执行另一个SQL / LINQ查询,但不能调用另一个C#函数。它无法将其转换为SQL。