LINQ SQL使用部分匹配从列表中选择

时间:2015-11-03 13:30:02

标签: c# sql linq

我有一个包含当前元素的列表wbsList

SS-B23813
SS-B23814

我希望SQL查找能够检索所有以列出的数字开头的wbs元素,所以我使用这段代码:

var q =
    from a in MESdb.GetTable<t_SAP_Order>()
    where wbsList.Contains(a.WbsElement) 
    orderby a.WbsElement, a.OrderDescription
    select a;

这没有任何结果,因为它只显示完全匹配。我所有的wbs都有一个更长的字符串(SS-B23813-24-1-15-06-100) 如何将列表用作部分搜索条件?

更新

当我将代码更改为Dunth的答案时,我收到以下错误: 除包含运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现。

我想知道当我尝试在数据网格中显示结果时是否因为某些错误而出现此错误:

caseGrid.DataSource = q.Select(o => new
                    {
                        Workcenter = o.MainWorkCenter,
                        SO = o.Ordr,
                        Description = o.OrderDescription,
                        SerialNumber = o.SerialNumber,
                        BasicFinish = o.BasicFin
                    }).ToList();

2 个答案:

答案 0 :(得分:1)

尝试这样做以找到它在开始时可能不在的位置。

var q = MESdb.GetTable<t_SAP_Order>()
            .Where(a => wbsList.Any(b => a.WbsElement.Contains(b)))
            .OrderBy(a => a.WbsElement)
            .ThenBy(a => a.OrderDescription).ToList();

答案 1 :(得分:0)

Contains执行sql IN(...),你想要一个sql LIKE所以使用wbList.StartsWith(a.WbsElement)