Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 我正在尝试连接3个表,下面是代码_Linq - Fatal编程技术网

Linq 我正在尝试连接3个表,下面是代码

Linq 我正在尝试连接3个表,下面是代码,linq,Linq,这是我的错误 LINQ to实体无法识别方法“System.String” getInterestNamesBy PushNotification(Int32)方法,以及此方法 无法转换为存储表达式 实体框架正在尝试在SQL端执行LINQ子句,显然从SQL的角度来看,没有与“getInterestNamesBy PushNotification(Int32)”等价的语句 您需要强制选择一个可枚举的对象,然后使用所需的方法重新选择对象 不理想,但类似的东西应该可以工作-(没有测试过,所以要很好)

这是我的错误

LINQ to实体无法识别方法“System.String” getInterestNamesBy PushNotification(Int32)方法,以及此方法 无法转换为存储表达式


实体框架正在尝试在SQL端执行LINQ子句,显然从SQL的角度来看,没有与“getInterestNamesBy PushNotification(Int32)”等价的语句

您需要强制选择一个可枚举的对象,然后使用所需的方法重新选择对象

不理想,但类似的东西应该可以工作-(没有测试过,所以要很好)

var result = (from p in db.push_notifications
              join nu in db.notification_recievers on p.id equals nu.push_notification_id
              join nt in db.notification_types on p.notification_type_id equals nt.id
              where (p.id == pushNotificationId && p.send_criteria == criteria && nu.delete_flag == false && p.delete_flag == false && nt.delete_flag == false)
              select new NotificationList
              {
                  conferenceId = p.conference_id,
                  pushNotificationId = p.id,
                  notificationId = nt.id,
                  notificationType = nt.notification_type,
                  nottificationDate = p.created_dt_tm,
                  criteria = (int)p.send_criteria,
                  notificationMessage = p.notification_msg,
                  userEmail=null,
                  userInterests = **getInterestNamesByPushNotificationId(p.id)**,
                  userEvents=null
              }).Distinct();

public string getInterestNamesByPushNotificationId(int id)
{
   string interests = string.Empty;
   var query = from i in db.interests
               join pn in db.notification_recievers
               on i.id equals pn.interest_id
               where pn.push_notification_id == id && pn.delete_flag == false
               select new
               {
                   name = i.name
               };

  foreach (var intr in query.Distinct())
  {
      if (interests == "")
      {
          interests = intr.name;
      }
      else
      {
          interests = interests + ", " + intr.name;
      }
  }
  return interests;
}
var result = (from p in db.push_notifications
                      join nu in db.notification_recievers on p.id equals nu.push_notification_id
                      join nt in db.notification_types on p.notification_type_id equals nt.id
                      where (p.id == pushNotificationId && p.send_criteria == criteria && nu.delete_flag == false && p.delete_flag == false && nt.delete_flag == false)
                      select new { p=p, nu = nu, nt = nt }).AsEnumerable().Select( x => new NotificationList()
                      {
                          conferenceId = x.p.conference_id,
                          pushNotificationId = x.p.id,
                          notificationId = x.nt.id,
                          notificationType = x.nt.notification_type,
                          nottificationDate = x.p.created_dt_tm,
                          criteria = (int)x.p.send_criteria,
                          notificationMessage = x.p.notification_msg,
                          userEmail=null,
                          userInterests = getInterestNamesByPushNotificationId(x.p.id),
                          userEvents=null
                      }).Distinct();
i have done it this way

In my model 
 using (NotificationService nService = new NotificationService())
            {
 modelView = nService.DetailsOfNotifications(pushNotificationId, criteriaId).Select(x => new NotificationViewModelUI(x.conferenceId, x.pushNotificationId, x.notificationId, x.notificationType, x.nottificationDate, x.criteria, x.notificationMessage, x.userEmail, nService.getInterestNamesByPushNotificationId(x.pushNotificationId), nService.getIEventTitlesByPushNotificationId(x.pushNotificationId))).ToList();
}

 public NotificationViewModelUI(int conferenceId, int pushNotificationId, int notificationId, string notificationType, DateTime dateTime, int criteria, string nMessage, string emailId = null, string interestNames = null, string eventTitles = null)
        {
            this.conferenceId = conferenceId;
            this.pushNotificationId = pushNotificationId;
            this.notificationId = notificationId;
            this.notificationType = notificationType;
            this.notificationDate = dateTime;
            this.sendCriteria = (NotificationCriteria)criteria;
            this.notificationMessage = nMessage;
            this.emailId = NotificationCriteria.SpecificUser.Description() +"...  "+ emailId;
            this.interestNames = NotificationCriteria.UserByInterests.Description() + "...  " + interestNames;
            this.eventTitles = NotificationCriteria.UserByEvents.Description() + "...  " + eventTitles;
        }