我有一个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, 托尼。
答案 0 :(得分:0)
var listitems = from SPListItem item in spList.Items
where item[myfieldname].ToString().Contains(valueImChecking)
select item;
字符串上的 Contains
方法应该有帮助。
答案 1 :(得分:0)
我建议拆分值并将它们写入单独的表中。如果您想稍后查找它们,我认为在同一个字段中存储多个值不是一个好的设计。
如果您不想更改数据库,可以使用shahkalpesh的答案。但是,如果某些值可能包含其他值(例如WXYZ
包含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不支持Split。
您可以使用第一个查询(取自shahkalpesh的答案)进行一些预过滤。
如果您的Items表很小,那么将所有内容加载到内存中并使用ling-to-objects(仅使用第二个查询)进行检查也是一个好主意。