如何在linq查询中调用自定义方法 [英] How to call custom method in linq query

查看:141
本文介绍了如何在linq查询中调用自定义方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写如下的自定义方法:

i write a custom method like below :

 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());
    }

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

and i want call this method in linq query like below :

 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;

    }

这就是所谓的代码:

  private void cmbTeams_SelectedIndexChanged(object sender, EventArgs e)
    {
        using (FutsalEntities myEntity = new FutsalEntities())
        {
            if (cmbTeams.SelectedIndex != -1 && myEntity.Players.Count() != 0)
            {
               dgPlayerList.DataSource =  GetPlayerListByTeamName(cmbTeams.SelectedValue.ToString(), myEntity);

但是当我运行应用程序时出现此错误:

but when i run application get this error :

LINQ to Entities无法识别方法'System.DateTime GetGregorianDate(System.String)'方法,并且该方法无法转换为商店表达式.

有什么方法可以在linq查询中调用此方法?

Is there any way to call this method in linq query?

推荐答案

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

Linq to Entities can't translate your method into SQL and execute it on server side. The only way to call your custom method is to move query into memory - e.g. by calling AsEnumerable() or ToList()

var players = from p in myEntity.Players.AsEnumerable()                      
              where GetGregorianDate(p.ContractDateTo) <= DateTime.Now
              select new { 
                  p.Name,
                  p.BearthDate, 
                  p.ContractNumber, 
                  p.InsuranceNumber, 
                  p.ContractDate, 
                  p.Mobile 
              };

请记住,这会将所有玩家数据通过网络传输到本地计算机.

Keep in mind, that this will transfer all players data over the network to local computer.

这篇关于如何在linq查询中调用自定义方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆