小编Ick*_*key的帖子

向Linq 2 Sql查询动态添加未确定数量的子句的正确方法是什么?

此函数用于返回用户搜索输入的联系人列表.搜索词的数量始终至少为一,但可能很多.

public IList<Contact> GetContacts(string[] searchTerms)
{
    using (dbDataContext db = new dbDataContext())
    {
        var contacts = from _contacts in db.Contacts
                       orderby _contacts.LastName ascending, _contacts.FirstName ascending
                       select _contacts;

        foreach (string term in searchTerms)
        {
            contacts = (IOrderedQueryable<Contact>)contacts.Where(x => SqlMethods.Like(x.FirstName, "%" + term + "%")
                                                                    || SqlMethods.Like(x.MiddleName, "%" + term + "%")
                                                                    || SqlMethods.Like(x.LastName, "%" + term + "%")
                                                                    || SqlMethods.Like(x.PreferredName, "%" + term + "%"));
        }

        return contacts.ToList<Contact>();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题出在循环中.即使生成的sql看起来是正确的,也只使用了最后一个搜索词(就像为术语数生成了正确数量的子句一样).

示例 - 如果我传递两个术语('andr','sm'),生成的sql显示两个子句块,但只使用'sm'作为两个块中的param.

我究竟做错了什么?我应该使用SqlMethods吗?

.net c# linq-to-sql

5
推荐指数
1
解决办法
64
查看次数

标签 统计

.net ×1

c# ×1

linq-to-sql ×1