2013-12-23 44 views
0

我想调用下面的查询字符串,但我在客户端收到'无数据'消息 - 'api/data?id = 786,899 & price_type = cvr'。如何在linq查询中使用split?

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'类型的字符串? – okrumnow

+0

这是'LINQ to SQL'吗? “LINQ to SQL”没有将'string.Split'转换为SQL。 –

+0

hi @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查询,而不是尝试在一组值中创建一个.sql –

+0

@ AD.Net,非常感谢您的帮助。当我单独搜索'price-type'参数(api/data?price-type = cvr)时,它会抛出一个空异常错误 - ExceptionMessage“:”对象引用未设置为对象实例。“, “ExceptionType”:“System.NullReferenceException”,“StackTrace”:“,在以下代码行(var ids ...)上。 – user3070072