C# 如何在linq查询中调用自定义方法

C# 如何在linq查询中调用自定义方法,c#,linq,entity-framework,C#,Linq,Entity Framework,我编写了一个自定义方法,如下所示: DateTime GetGregorianDate(string date) { return new DateTime(int.Parse(date.Substring(0, 4)), int.Parse(date.Substring(5, 2)), int.Parse(date.Substring(8, 2)), new System.Globalization.PersianCalendar()); } dyn

我编写了一个自定义方法,如下所示:

 DateTime GetGregorianDate(string date)
    {
       return  new DateTime(int.Parse(date.Substring(0, 4)), int.Parse(date.Substring(5,    2)), int.Parse(date.Substring(8, 2)), new System.Globalization.PersianCalendar());
    }
 dynamic GetPlayerListByTeamName(string teamCode, FutsalEntities myEntity)
    {
        var player = (from p in myEntity.Players
                     where p.TeamCode == teamCode && (GetGregorianDate(p.ContractDateTo) <= DateTime.Now) ? true : false
                     select new { p.MeliCode, p.BearthDate, p.ContractNumber, p.InsuranceNumber, p.ContractDate, p.Mobile });
        return player;

    }
我想在linq查询中调用此方法,如下所示:

 DateTime GetGregorianDate(string date)
    {
       return  new DateTime(int.Parse(date.Substring(0, 4)), int.Parse(date.Substring(5,    2)), int.Parse(date.Substring(8, 2)), new System.Globalization.PersianCalendar());
    }
 dynamic GetPlayerListByTeamName(string teamCode, FutsalEntities myEntity)
    {
        var player = (from p in myEntity.Players
                     where p.TeamCode == teamCode && (GetGregorianDate(p.ContractDateTo) <= DateTime.Now) ? true : false
                     select new { p.MeliCode, p.BearthDate, p.ContractNumber, p.InsuranceNumber, p.ContractDate, p.Mobile });
        return player;

    }
但当我运行应用程序时,会出现以下错误:

LINQ to Entities无法识别方法“System.DateTime GetGregorianDate(System.String)”方法,并且无法将此方法转换为存储表达式


有没有办法在linq查询中调用此方法

Linq to实体无法将您的方法转换为SQL并在服务器端执行。调用自定义方法的唯一方法是将查询移动到内存中-例如,通过调用
AsEnumerable()
ToList()

var players=来自myEntity.players.AsEnumerable()中的p

其中GetGregorianDate(p.ContractDateTo)转换日期时间。现在转换为波斯日期,将其存储在一个变量中,然后在查询中使用该变量,以便服务器端查询将进行波斯日期比较。

此查询将从myEntity.Players表中选择所有单词。这可能很昂贵。@YD1m:为什么你对别人的答案发表评论而不是自己的?克里斯,我的评论是如何引用我的答案的?我刚刚错过了lazyberezovsky答案中的最后一个字符串。当我在查询中添加'AsEnumerable()'时,我得到的收集结果为空!(“枚举没有结果”)。为什么会发生这种情况?@M.Doos看起来像是
myEntity
不是上下文,而且你没有加载玩家。你从哪里得到myEntity实例?有几个提示-如果你有布尔运算,你不需要返回
true
false
-只需返回运算结果即可。我认为球员应该有出生日期。并尝试将日期存储为
DateTime
,而不是字符串。我将日期存储为字符串,因为SQLServer不支持PresianDateTime,我需要将PresianDateTime转换为GROGRIAN进行比较。我想我应该救他们两个;我的数据库中有波斯和格里高利日期。