C# 如何通过PredicateBuilder为此构建动态SQL?

C# 如何通过PredicateBuilder为此构建动态SQL?,c#,sql,linq,sql-like,predicatebuilder,C#,Sql,Linq,Sql Like,Predicatebuilder,我正在使用这里看到的PredicateBuilder,我想为表构建一个LINQ,如何将这个transact-sql转换为LINQ 选择* 来自成员 其中Confirm=true CaseExist=true 和(用户名如“%Jack%”或全名如“%Jack%”) 和(标签位于('3D'、'Photoshop'、'Java'、'Design')) 和(Catid+,“如“%2,%”或Catid+,“如“%4,%” 或Catid+,“如“%5、%”或Catid+,“如“%21、%”) 按费率1说明、

我正在使用这里看到的PredicateBuilder,我想为表构建一个LINQ,如何将这个
transact-sql
转换为LINQ

选择*
来自成员
其中Confirm=true
CaseExist=true
和(用户名如“%Jack%”或全名如“%Jack%”)
和(标签位于('3D'、'Photoshop'、'Java'、'Design'))
和(Catid+,“如“%2,%”或Catid+,“如“%4,%”
或Catid+,“如“%5、%”或Catid+,“如“%21、%”)
按费率1说明、费率2说明、费率3说明、最新登录说明、最新日期说明排序
我构建这个:

var predicate = PredicateBuilder.True<Member>();

if (!string.IsNullOrEmpty(SearchString))
{
    predicate = predicate.And(x =>
        x.Username.Contains(SearchString)
        || x.FullName.Contains(SearchString)
    );
}

predicate = predicate.And(x => x.Confirmed == true)
                     .And(x => x.CaseExist == true);
var predicate=PredicateBuilder.True();
如果(!string.IsNullOrEmpty(SearchString))
{
谓词=谓词。和(x=>
x、 Username.Contains(搜索字符串)
||x.FullName.Contains(搜索字符串)
);
}
谓词=谓词和(x=>x.confirm==true)
.和(x=>x.CaseExist==true);
但是我不能继续了,所以有人能建议我怎么做吗?

string[]arr=newstring[]{“3D”、“Photoshop”、“Java”、“Design”};
    string[] arr = new string[] { "3D", "Photoshop", "Java", "Design" };
    predicate = predicate.And(x => arr.Contains(x.Tags));

    var arr2 = new[] { "2", "4", "5", "21" };
    var predicateCatid = PredicateBuilder.False<Member>();
    foreach (var cat in arr2)
    {
        predicateCatid = predicateCatid.Or(x => (x.Catid + ",").Contains(cat + ","));               
    }
    predicate = predicate.And(predicateCatid);
谓词=谓词和(x=>arr.Contains(x.Tags)); var arr2=新[]{“2”、“4”、“5”、“21”}; var predicateCatid=PredicateBuilder.False(); foreach(arr2中的var cat) { predicateCatid=predicateCatid.Or(x=>(x.Catid+“,”).Contains(cat+“,”)); } 谓词=谓词和(predicateCatid);

我想知道为什么
标签
只能有一个标签。

效果很好,非常感谢。顺便说一句,用户只需选择1个标签作为主标签,真正的标签是Catid。