是否有一种方法来包含一个CASE或条件语句内的LINQ查询?我试图根据传入该方法的参数动态构建我的select语句。Linq查询中的CASE或IF语句?
这里是我如何写T中的SQL:
select * from Table1
where Table1Id =
CASE WHEN LEN myParameter > 0
THEN myParamter
ELSE Table1.Table1Id
,这里是我的LINQ查询与SQL CASE中猛:
var query = from a in Table1
where a.Table1Id==
CASE WHEN LEN myParameter > 0
THEN myParamter
ELSE Table1.Table1Id
&& a.shortName == myParameter2
&& a.Country == myParameter3
select a;
return query.ToList();
这样的事情......
看起来我可以使用myParameter.Length()
方法,但不知道从哪里开始的语法?
好吧,这里有云,整个原始SQL语句的方法:
string nativeSQLQuery = string.Format("SELECT c.ArticleId ,
+ "c.ArticleTitle,"
+ c.Version,
+ "c.shortName,c.Country,c.ArticleHeader,c.ArticleBody,"
+ "c.DateCreated,c.UserCreated,c.DateUpdated,c.UserUpdated,"
+ "c.isPublished"
+ "c.isBreakingNews"
+ " FROM ISES.vwArticles c "
+ " WHERE c.ArticleTitle = "
+ " CASE WHEN LEN('{1}') > 0"
+ " THEN '{1}'"
+ " ELSE c.ArticleTitle"
+ " END "
+ " AND c.shortName = "
+ " CASE WHEN LEN('{2}') > 0"
+ " THEN '{2}'"
+ " ELSE c.shortName"
+ " END "
+ " AND c.Country = "
+ " CASE WHEN LEN('{3}') > 0"
+ " THEN '{3}'"
+ " ELSE c.Country"
+ " END "
+ " AND c.articleid NOT IN "
+ " (SELECT pa.articleid FROM ISES.tbPublicationArticles pa "
+ " WHERE pa.publicationid={0})", publicationId, ModelSelectedArticleTitle, vRegionShortName, ModelSelectedCountryshortName);
你们是不是要迁移与“可选”的参数,以LINQ的存储过程?你不必像@詹姆斯表演那样做。你可以追加'Where()'子句到你的'Queryable <>'和LINQ to Entities将创建适当的SQL语句 – 2015-01-15 16:22:23