简体   繁体   English

如何通过调用Entity Framework中的方法获取数据

[英]How do i get data by calling a method in Entity Framework

I want to get ResourceNames on the base of Id in EntityFramework but it is giving error: "LINQ to Entities does not recognize the method 'System.String GetResourceNameById(Int32)' method, and this method cannot be translated into a store expression." 我想基于EntityFramework中的Id获取ResourceNames,但它给出了错误:“ LINQ to Entities无法识别方法'System.String GetResourceNameById(Int32)',该方法无法转换为商店表达式。” Following ismy code. 以下是我的代码。

    public string  GetResourceNameById(int Id)
    {
        return _DBContex.Employees.Where(x => x.Id == Id).FirstOrDefault().FirstName;
    }


    public CygnusInternalResponseViewModel GetAllTimeEntriesForGrid(int start = 0, int perPage = -1, string sortColumn = "", string sortDirection = "")
    {
        List<TimeEntryViewModel> te = new List<TimeEntryViewModel>();

        te = (from jb in _DBContex.TimeEntries
             select new TimeEntryViewModel
             {
                 Id = jb.Id,

                 ResourceId = (int)jb.ResourceId,
                 TicketId = (int)jb.TicketId,
                 WorkType = (WorkTypeCatalog)jb.WorkType,
                 HoursWorked = (float)jb.HoursWorked,
                 Status = (TimeEntryStatusCatalog)jb.Status,
                 Role = (RoleCatalog)jb.Role,
                 StartTime = (TimeSpan)jb.StartTime,
                 EndTime = (TimeSpan)jb.EndTime,
                 SummaryNotes = jb.SummaryNotes,
                 InternalNotes = jb.InternalNotes,
                 Contract = (DateTime)jb.Contract,
                 Date = (DateTime)jb.Date,
                 ResourceName = GetResourceNameById((int)jb.ResourceId)    //   ERRORR Line

             }).ToList();

You might need to create in memory representation of your database table. 您可能需要创建数据库表的内存表示形式。

 public CygnusInternalResponseViewModel GetAllTimeEntriesForGrid(int start = 0, int perPage = -1, string sortColumn = "", string sortDirection = "")
    {
        List<TimeEntryViewModel> te = new List<TimeEntryViewModel>();
        var query=_DBContex.TimeEntries.ToList();//create in-memory representation
        te = (from jb in query
             select new TimeEntryViewModel
             {
                 Id = jb.Id,

                 ResourceId = (int)jb.ResourceId,
                 TicketId = (int)jb.TicketId,
                 WorkType = (WorkTypeCatalog)jb.WorkType,
                 HoursWorked = (float)jb.HoursWorked,
                 Status = (TimeEntryStatusCatalog)jb.Status,
                 Role = (RoleCatalog)jb.Role,
                 StartTime = (TimeSpan)jb.StartTime,
                 EndTime = (TimeSpan)jb.EndTime,
                 SummaryNotes = jb.SummaryNotes,
                 InternalNotes = jb.InternalNotes,
                 Contract = (DateTime)jb.Contract,
                 Date = (DateTime)jb.Date,
                 ResourceName = GetResourceNameById((int)jb.ResourceId)   
             }).ToList();
    te = (from jb in _DBContex.TimeEntries
         select new TimeEntryViewModel
         {
             Id = jb.Id,

             ResourceId = (int)jb.ResourceId,
             TicketId = (int)jb.TicketId,
             WorkType = (WorkTypeCatalog)jb.WorkType,
             HoursWorked = (float)jb.HoursWorked,
             Status = (TimeEntryStatusCatalog)jb.Status,
             Role = (RoleCatalog)jb.Role,
             StartTime = (TimeSpan)jb.StartTime,
             EndTime = (TimeSpan)jb.EndTime,
             SummaryNotes = jb.SummaryNotes,
             InternalNotes = jb.InternalNotes,
             Contract = (DateTime)jb.Contract,
             Date = (DateTime)jb.Date

         }).ToList();
    te.Foreach(t=>t.ResourceName = GetResourceNameById((int)t.ResourceId);

First you get the records then you set the ResourceName 首先获取记录,然后设置ResourceName

您可以在SELECT之前调用ToList()方法,然后调用函数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM