2016-02-18 41 views
2

我有串的名单像这样搜索对象列表使用LINQ内字符串SQL

List<string> list1 = new List<string>(); 

例如我的名单是

{one , two , three , four , five} 

在数据库中,我有一个string这样

"five-six-seven-eight" 

如何使用Linq to SQL在我的数据库字符串和我的列表之间进行搜索。例如,我的查询搜索应该是真实的,因为“five”在两者上都是常见的。 我的查询是这样的:

var q = from p in m.ViewAbuseReports where 
(list1.Contains(p.Abuse.ToString().Split('-')) || list1.Count == 0) 
    select new 
    { 
     Col2 = p.FirstName + " " + p.LastName, 
     Col3 = p.DateTakhalof, 
     Col4 = p.DateReturn 
    }; 
+0

我没有得到这个问题,你是否善意地更多一些clarrify。 – Ovis

+1

似乎你需要LINQ'Intersect' – Ian

+0

@Ovis我想在字符串中搜索字符串列表,我的字符串在数据库中分割为“ - ” – mosyflasher

回答

2

您可以考虑使用LINQ Intersect

var q = from p in m.ViewAbuseReports 
let ps = p.Abuse.ToString().Split('-') 
let i = list1.Intersect(ps).ToList() //here you get if there is any intersect (common elements) between the two `IEnumerable` 
where (i.Count > 0 || list1.Count == 0) 
select new 
{ 
    Col2 = p.FirstName + " " + p.LastName, 
    Col3 = p.DateTakhalof, 
    Col4 = p.DateReturn 
}; 
+2

'Intersect'不能用于LinQToSQL中的本地集合。 –

+0

感谢兄弟,它解决了我的问题 – mosyflasher

+0

@mosyflasher太棒了!很高兴我的解决方案符合您的需求。 ;) – Ian

2
var q = from p in m.ViewAbuseReports where 
(list1.Any(l => p.Abuse.ToString().Contains(l)) || list1.Count == 0) 
select new 
{ 
    Col2 = p.FirstName + " " + p.LastName, 
    Col3 = p.DateTakhalof, 
    Col4 = p.DateReturn 
}; 

如果任何list1的字符串是p.Abuse这将是真实的。这样你就不必考虑拆分字符串了(这在数据库中很难做到)。