0

我有一个 SQL 表,它有一个简单的字符串字段,该字段可能包含单个值(例如 'ABC'),或者它可能包含由竖线 ('|') 字符分隔的列表(例如 'ABC|EDF|GHI'例如)。

如果我有一个 SharePoint 列表并且想要交叉检查以确保我的 SP 列表中的所有值都存在于 SQL 表中,我可以很容易地做到这一点,假设 SQL 字段只有一个值:

var listitems = from SPListItem item in spList.Items 
                where item[myfieldname].Equals(valueImChecking) 
                select item;

假设它包含由“|”分隔的值列表,我如何使用类似的方法来检查相同的 SQL 字段?例如,如果此字段的值为“ABC|EDF|GHI”并且我正在检查它是否包含“GHI”,我如何在 LINQ 中构建查询?

TIA,-托尼。

4

2 回答 2

0
var listitems = from SPListItem item in spList.Items 
                where item[myfieldname].ToString().Contains(valueImChecking) 
                select item;

Contains字符串上的方法应该有帮助。

于 2013-07-22T14:43:11.177 回答
0

我建议拆分值并将它们写入单独的表。如果您想稍后查找它们,我认为在同一字段中存储多个值不是一个好的设计。

如果您不想更改数据库,可以使用 shahkalpesh 的答案。但是,如果某些值可能包含其他值(例如WXYZcontains XYZ),则只会为您提供可能的候选者列表。您需要检查内存中的结果:

// this filters for possible candidates
var candidates = from item in spList.Items 
                 where item[myfieldname].ToString().Contains(valueImChecking) 
                 select item;

// this filters the result using ling-to-objects
var listItems = from candidate in candidates.AsEnumerable()
                where candidate[myfieldname].ToString().Split('|').Contains(valueImChecking)
                select candidate;

使用AsEnumerable切换到 Linq-To-Objects。这是必需的,因为 LINQ to SQL 不支持拆分。

您可以使用第一个查询(取自 shahkalpesh 的回答)进行一些预过滤。
如果您的 Items 表很小,最好将所有内容加载到内存中并使用 ling-to-objects 进行检查(仅使用第二个查询)。

于 2013-07-22T16:42:47.617 回答