какого приведения отсутствует в синтаксисе linq? - PullRequest
2 голосов
/ 17 августа 2010
tblUserRole Permission = 
      (oCurrenUserPermission.GetPermission(Convert.ToString(Session["Navigation"])));
if (Permission.IsInsert == 1)
{
}

public IQueryable GetPermission(string sPageName)
{
   IQueryable query;
   #region MyRegion
   query = from r in this.Context.tblUserRoles
              join p in this.Context.tblPageInfos on r.PageID equals p.PageID
             where r.Record_Status == 2 && p.PageName == sPageName
           select r;
   return query;
  #endregion
 }

Приведенный выше синтаксис показывает следующую ошибку:

Ошибка 1 Не удается неявно преобразовать тип 'System.Linq.IQueryable' в 'AkijBeverage.ServiceObject.tblUserRole'. Существует явное преобразование (вам не хватает приведения?) E: \ Project-Akij \ 09-July-2010 \ AkijBeverage \ AkijBeverage \ SecurityUserControls \ UCUserRole.ascx.cs 63 43 AkijBeverage

Как это решить?

Ответы [ 3 ]

1 голос
/ 17 августа 2010

Насколько я могу судить, этот запрос просто несовместим с tblUserRole.

Он будет возвращать IEnumereable<bool> вместо tblUserRole.Реальная проблема заключается в том, что вы выбираете IsInsert в двух разных местах: в запросе и снова в if()

Самый простой способ - просто вернуть полный объект tblUserRole:

return (from r in this.Context.tblUserRoles 
                join p in this.Context.tblPageInfos on r.PageID equals p.PageID 
                where r.Record_Status == 2 && p.PageName == sPageName 
                select r).SingleOrDefault();
1 голос
/ 17 августа 2010

В настоящее время вы возвращаете запрос, а не один элемент.Что вы хотите вернуть?

Вот один вариант, например:

public tblUserRole GetPermission(string sPageName)
{
    return (from r in this.Context.tblUserRoles
            join p in this.Context.tblPageInfos on r.PageID equals p.PageID
            where r.Record_Status == 2 && p.PageName == sPageName
            select r).FirstOrDefault();
}

Это вернет первую подходящую роль или null, если нетничего.

Если вы делаете хотите вернуть запрос, было бы лучше, если бы вы строго набрали IQueryable<T>:

public IQueryable<tblUserRole> GetPermissions(string sPageName)
{
    return from r in this.Context.tblUserRoles
           join p in this.Context.tblPageInfos on r.PageID equals p.PageID
           where r.Record_Status == 2 && p.PageName == sPageName
           select r;
}

Тогда вынужно изменить свой код вызова на что-то вроде этого:

tblUserRole Permission 
   oCurrenUserPermission.GetPermissions(Convert.ToString(Session["Navigation"]))
                        .FirstOrDefault();
0 голосов
/ 17 августа 2010

Проблема в том, что у вас есть IQueryable и вы пытаетесь присвоить «Тип» без приведения.

Либо измените свой метод на:

  public IQueryable<tblUserRole > GetPermission(string sPageName)

и затем сделать (First / FirstOrDefault / Single / и т.д ..)

 oCurrenUserPermission.GetPermission(...).FirstOrDefault();

Или бросьте его, скрестите пальцы и выберите один.

   (tblUserRole)oCurrenUserPermission.GetPermission(...).FirstOrDefault();

Примечание стороны

Я бы посоветовал вам поработать над названием вашего кода в более дружественной манере. Не нужно вводить «тип» в начале. Например, возможный лучший способ назвать все:

 string navigationValue = Convert.ToString(Session["Navigation"]);

 UserRole permission = 
  currentUserPermission.GetPermission(navigationValue ).FirstOrDefault();

 //If this isn't a boolean i would consider using one
 if (permission.IsInsert == 1)
 {
 }

 public IQueryable<UserRole> GetPermission(string sPageName)
 {

    #region MyRegion
    var query = from r in this.Context.UserRoles
                    join p in this.Context.PageInformation on r.PageID equals p.PageID
                where r.Record_Status == 2 && p.PageName == sPageName
                select r;
   return query;
   #endregion
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...