linq 查询中的 CASE 或 IF 语句



有没有办法在 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 语句使用延迟加载,因此您可以构建动态查询

var query = someList;
if (myParameter > 0) {
    // dynamic filter
    query = query.Where(x => x.Table1Id == myParameter);
}

交替写成单行

var query = myParameter > 0 ? someList : someList.Where(x => x.Table1Id == myParameter);

已重写现有代码

var query = _Context.vwArticles
    .Where(x => a.ArticleTitle == modelSelectedArticleTitle &&
                a.shortName == regionShortName &&
                a.Country == modelSelectedCountryshortName);
if (myParameter > 0) {
    query = query.Where(x => x.Table1Id == myParameter);
}
return query.ToList();

使用条件运算符:

var query = from item in table
    let table1Id = myParameter.Length() > 0 ? myParameter : item.Table1Id
    select item;

最新更新