首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架-> Execute and LIKE子句

实体框架-> Execute and LIKE子句
EN

Stack Overflow用户
提问于 2015-10-29 17:48:51
回答 1查看 50关注 0票数 0

在将需要执行like的参数传递到我的存储过程时,我遇到了一个小问题。

这是我目前所拥有的代码,如下所示:

代码语言:javascript
复制
using (GIDSEntities db = new GIDSEntities())
            {
                SqlParameter tvpClientList = new SqlParameter("@CorporateClientList", dtCompanies);
                tvpClientList.TypeName = "TravellerTracking.ClientIdList";
                SqlParameter pFromDate = new SqlParameter("@FromDate", fDate);
                SqlParameter pToDate = new SqlParameter("@ToDate", tDate);
                SqlParameter pLocation = new SqlParameter("@Location", "%" + location + "%");
                SqlParameter pTrains = new SqlParameter("@Trains", "%" + trains + "%");
                List<RailData> international = db.Database.SqlQuery<RailData>("exec TravellerTracking.InternationalRail @FromDate, @ToDate, @CorporateClientList, @Location, @Trains", pFromDate, pToDate, tvpClientList, pLocation, pTrains).ToList();
                Rail.AddRange(international);
            }

我的存储过程where子句如下所示:

代码语言:javascript
复制
WHERE ((router LIKE CASE WHEN @Location = '%%' THEN router ELSE @Location END)
AND
    ((@Trains = '%%' AND trains = trains) OR trains LIKE @Trains))

正如您所看到的,我尝试以不同的方式编写SQL,以允许用户不传递任何内容,而传递某些内容。

我在C#或SQL中所做的似乎都不起作用,有谁有这方面的经验或解决方案吗?

谢谢你,卡尔

EN

回答 1

Stack Overflow用户

发布于 2015-10-29 17:58:51

传入不带引号的参数:

代码语言:javascript
复制
SqlParameter pTrains = new SqlParameter("@Trains", trains);

在存储过程中,您可以这样声明它:

代码语言:javascript
复制
@Trains varchar(100) = NULL

在查询中使用它,如下所示:

代码语言:javascript
复制
AND (trains LIKE @Trains + '%' OR @Trains IS NULL)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33410823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档