2012-05-30 4 views
5

Я использую библиотеку Dynamic Linq здесь:Динамический запрос LINQ не работает

http://speakingin.net/2008/01/08/dynamic-linqparte-1-usando-la-libreria-de-linq-dynamic/

http://msdn.microsoft.com/en-us/vstudio//bb894665.aspx

У меня есть следующий код в моем DAL:

public IQueryable<RequestBase> GetRequestByCustomQuery(string strql) 
      { 
       return _context.RequestBases.Where(strql); 
      } 

И я на моей странице:

protected void BtnOpenReport_Click(object sender, EventArgs e) 
     { 
      var list = RequestBaseBL.GetRequestByCustomQuery("RequestNumber = 12"); 
      GrvResults.DataSource = list; 
      GrvResults.DataBind(); 
     } 

Я опускаю все остальные слои, но есть BL, затем Far Facade, а затем DL, но все, что они делают, это передать строку в последний слой DAL.

я получаю исключение

Operator '=' incompatible with operand types 'String' and 'Int32' 

Объект, как это:

public class RequestBase 
    { 
     public int RequestBaseId { get; set; } 
     public string CurrentStatus { get; set; } 
     public string RequestNumber { get; set; } 
     public DateTime RequestDate { get; set; } 
     public bool IsOnHold { get; set; } 

     public virtual Dealer Dealer { get; set; } 
     public virtual Requester Requester { get; set; } 
     public virtual Vehicle Vehicle { get; set; } 

     public virtual ICollection<Attachment> Attachments { get; set; } 
     public virtual ICollection<WorkflowHistory> WorkflowHistories { get; set; } 

ответ

12

Это может быть потому, что ваш RequestNumber определяется как строка в объект. Но в запросе "RequestNumber = 12" 12 считается числом.

Попробуйте с "RequestNumber == \"12\""

Вы не можете использовать простые цитаты либо, потому что для характера, то есть только одна буква.

+0

отлично, спасибо! –

0

Я получил это ваш "RequestNumber" является строкой и придется использовать Equals ("12"), попробуйте это должно определенно работать.

RequestNumber.Equals ("12")

С Днем Coding !!!

+0

Оператор '==' несовместим с типами операндов 'String' и 'Int32' –

+0

Я пробовал это == с одинарными кавычками, и я получил это: Символьный литерал должен содержать ровно один символ –

+0

@LuisEValencia обновленный ответ, пожалуйста, проверьте его. – Ravia

2

Я думаю, что вам нужно изменить

"RequestNumber = 12" 

в

"RequestNumber = '12'" 

Becuase RequestNumber является string. Если вы не имеете '' вокруг него будет думать, что это int

Редактировать

Вы также можете попробовать "RequestNumber == \"12\"" с экранирующего символа

+0

Я сделал это, как вы сказали: var list = RequestBaseBL.GetRequestByCustomQuery ("RequestNumber = '12'"); , а затем эта ошибка возникла. Символьный литерал должен содержать ровно один символ –

+0

Обновить ответ – Arion

Смежные вопросы