2013-12-23 4 views
0

Я пытаюсь вызвать следующую строку запроса, но я получаю сообщение «нет данных» на стороне клиента - «api/data? Id = 786,899 & price_type = cvr».Как использовать split в запросе linq?

public HttpResponseMessage Get([FromUri] Query query) 
{ 
    var data = db.database_ICs.AsQueryable(); 

    if (query.id!= null) 
    { 
     data = data.Where(c => query.id.Split(',').Contains(c.ID)); 
    } 
    if (query.price_type != null) 
    { 
     data = data.Where(c => c.Cover == query.price_type); 
    } 

    if (!data.Any()) 
    { 
     var message = string.Format("No data was found"); 
     return Request.CreateErrorResponse(HttpStatusCode.NotFound, message); 
    } 

    return Request.CreateResponse(HttpStatusCode.OK, data); 
} 

public class Query 
{ 
    public string id{ get; set; } 
    public string price_type { get; set; } 
    public Nullable<DateTime> startDate { get; set; } 
    public Nullable<DateTime> endDate{ get; set; } 
} 

Любая помощь будет очень признательна. Большое спасибо.

+0

Является ли 'c.ID' типа string? – okrumnow

+0

Является ли это 'LINQ to SQL'? 'LINQ to SQL' не имеет перевода для' string.Split' в SQL. –

+0

привет @okrumnow, да, это правильно. – user3070072

ответ

0
var data = db.database_ICs.AsQueryable(); 
    if (!string.IsNullOrEmpty(query.id)) 
     { 
      var ids = query.id.Split(',').ToList(); 
      data = data.Where(c => ids.Contains(c.ID)); 
     } 

Предполагая, что элементы c.ID и ids имеют один и тот же тип курса. Редактировать: один из способов проверить, есть ли у вас запрос или нет

+0

Какая проблема заключается в преобразовании его в решение списка? – EkoostikMartin

+0

Он должен создать запрос IN sql к набору значений вместо того, чтобы пытаться сделать .Split в sql –

+0

@ AD.Net, большое вам спасибо за вашу помощь. Когда я самостоятельно ищу параметр «тип цены» (api/data? Price-type = cvr), он генерирует ошибку исключения null - ExceptionMessage »:« Ссылка на объект не установлена ​​в экземпляр объекта ». «ExceptionType»: «System.NullReferenceException», «StackTrace»: », в следующей строке кода (var ids ...). – user3070072

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