简体   繁体   English

如何通过PredicateBuilder构建动态SQL?

[英]How to build dynamic SQL by PredicateBuilder for this?

I'm using the PredicateBuilder as seen here http://www.albahari.com/nutshell/predicatebuilder.aspx , I want to build a LINQ for table, how to transform this transact-sql to LINQ? 我使用的是PredicateBuilder,如http://www.albahari.com/nutshell/predicatebuilder.aspx所示 ,我想为表构建LINQ,如何将此transact-sql转换为LINQ?

SELECT * 
FROM Members 
WHERE Confirm=true 
AND CaseExist=true 
AND ( Username LIKE '%Jack%' OR Fullname LIKE '%Jack%' ) 
AND ( Tags IN ('3D','Photoshop','Java','Design') ) 
AND ( Catid+',' LIKE '%2,%' OR Catid+',' LIKE '%4,%' 
      OR Catid+',' LIKE '%5,%' OR Catid+',' LIKE '%21,%' ) 
ORDER BY Rate1 DESC, Rate2 DESC, Rate3 DESC, LatestLogin DESC, LatestUpdate DESC

I build this: 我建立这个:

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);

But I can't go on, so can anyone suggest me on how to do this? 但是我不能继续,所以有人可以建议我如何做吗?

    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);

I wonder why Tags can have only one tag in it. 我不知道为什么Tags只能包含一个标签。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM