红包
◆ [2024-4-24 星期三 10:37] ◆ 您来自:13.59.36.203,欢迎您访问風雲工作室。 收藏本站 ◆ | ◆ 设为首页
联系站长(腾讯QQ)
5029111 [風雲]
站长当前离线
首  页 论坛交流 游戏频道 无忧脚本 旧版论坛 云服务器 聊 天 室 自助链接 来访记录 访客留言 搜索提供
位置:風雲工作室 - 论坛交流 - 技术专栏 - 后台开发 - 【原创】终于完成了LINQ to SQL的多字段多关键词搜索功能 返回
主题:【原创】终于完成了LINQ to SQL的多字段多关键词搜索功能
Rimifon
★☆☆☆☆☆☆☆☆☆
积分:285
发帖:317
登录:2024/3/26
注册:2006/6/28
(1楼)【原创】终于完成了LINQ to SQL的多字段多关键词搜索功能
调用方法如下:
var query = db.T_Article.Where(t=>t.IsAudit);
query = Search(query, t=>new{t.Title, t.Content}, new[]{"key1", "key2"});
代码如下(记得using System.Linq.Expressions)
    IQueryable<MyTable> Search<MyTable, MyField>(IQueryable<MyTable> query, Expression<Func<MyTable, MyField>> arrField, string[] arrKeyword)
    {
        Expression rule = null;
        foreach (var strKey in arrKeyword)
        {
            if (strKey.Trim() == "") continue;
            foreach (var field in ((NewExpression)arrField.Body).Arguments)
            {
                var expr = Expression.Call(field, typeof(string).GetMethod("Contains"), Expression.Constant(strKey));
                if (rule == null)
                {
                    rule = expr;
                    continue;
                }
                rule = Expression.Or(rule, expr);
            }
        }
        if (rule == null) return query;
        return query.Where((Expression<Func<MyTable, bool>>)Expression.Lambda(rule, arrField.Parameters[0]));
    }


时间:2008年11月10日 23:52:56 IP:已记录 引用 回复

© Copyright 2006-2024,風雲工作室 All rights reserved.
湘ICP备05009306号QQ登录
操作 1 个库,连接 2 次,执行 7 次,耗时 156 毫秒。