如何在一个查询中添加SqlMethods.Like()的变量计数?

时间:2010-08-31 14:26:33

标签: c# linq-to-sql

你能帮我解决下一个问题:我想在一个查询中添加SqlMethods.Like()的变量数吗?

例如:我在列表catCode中有四个单词,如何用四个SqlMethods.Like()创建LINQ查询?

using (var db = new MappingDataContext(_connection))
{
    db.ObjectTrackingEnabled = false;

    return (
        from r in db.U_CDW_REPORTs
        where (catCode.Length > 0 ? 
            SqlMethods.Like(r.CATEGORY, catCode) : r.CATEGORY != "*")
        where r.SI_QTY > 0
        orderby r.SI_QTY descending
        select new Item
        {
            ...
        }).ToList();
}

3 个答案:

答案 0 :(得分:2)

您需要的是动态删除SqlMethod.Like操作。您需要PredicateBuilder

<小时/> 更新:以下是如何使用谓词构建器的示例。

string[] searchItems =
    new string[] { "Pattern1", "Pattern2", "Pattern3" };

var likeExpression = PredicateBuilder.False<U_CDW_REPORT>();

foreach (string searchItem in searchItems)
{
    var searchPattern = "%" + searchItem + "%";
    likeExpression = likeExpression.Or(r => 
        SqlMethods.Like(r.CATEGORY, searchPattern));
}

return (
    from r in db.U_CDW_REPORTs.Where(likeExpression)
    where r.SI_QTY > 0
    orderby r.SI_QTY descending
    select new Item { ... }).ToList();

答案 1 :(得分:1)

你的意思是你有4个不相交的LIKE条款?

from entityRow in ctx.MyEntity
where (SqlMethods.Like(entityRow.Col, "%Pattern1%")
    || SqlMethods.Like(entityRow.Col, "%Patte%rn2%") 
    || SqlMethods.Like(entityRow.Col, "Pattern3%") 
    || SqlMethods.Like(entityRow.Col, "%Patte%rn4%")) 
select entityRow;

<强>更新

在这种情况下,请看一下:LINQ for LIKE queries of array elements

答案 2 :(得分:1)

编辑:使代码更简单。另请注意下面的更新说明。

您可以通过以下方式使用多个Where子句构建查询。请注意,此方法会对Where子句进行AND,这意味着所有搜索项都需要存在。换句话说,它类似于... where (condition1) && (condition2) && (conditionN)

string[] words = { "A", "B", "C" };
var query = dc.Products.AsQueryable(); // gives us an IQueryable<T> to build upon
foreach (var s in words)
{
    query = query.Where(p => SqlMethods.Like(p.ProductName, "%" + s + "%"));
}

foreach (var item in query)
{
    Console.WriteLine(item.ProductName);
}

我们的想法是设置查询的第一部分,然后循环搜索术语并更新查询。当然你应该根据需要更新你的模式;我使用%word%仅用于说明目的。