Lambda表达式以获取与数据列表匹配的记录

时间:2016-08-12 18:23:11

标签: c# entity-framework lambda

我有

string[] centersArr = new string[] {253, 6789, 9080};

我想查询数据库,其中心编号以上面数组的任何项目开头,中心的第8个字符应为'1'。

var result = disctrict.Where(x => centersArr.Contains(x.Center) && x.Center[7] == '1').ToList(); 

我的数据库中心号码为2533455,2537890,25312678,678912等等。

上面的查询返回null结果。请帮我怎么写这个查询。

2 个答案:

答案 0 :(得分:1)

我解决了这个问题:

.Where(x => centersArr.Any(c => x.Center.StartsWith(c)) && ....)

答案 1 :(得分:0)

centersArr.Contains(x.Center)无效。

centersArr中的项目确实不能包含您提供的任何示例数据库值。我怀疑所有数据库值都是如此。

从本质上讲,你要求的情况是以下情况属实(以下是超伪伪代码)

ListOfCenters('A','B','C').Contains(ListOfLongerItemsFromDatabase('WORDA', 'BWORD', 'WORDC').

那完全落后了。 WORDA或BWORD或WORDC可以并且确实包含A,B或C.但不是相反。

这有助于澄清吗?

然而,这应该有效:

var result = disctrict.Where(x => (x.Center.Contains("253") || x.Center.Contains("6789") || x.Center.Contains("9080")) && x.Center[7] == '1').ToList();

除非Linq to SQL无法将其转换为SQL表达式。 。 ..如果它不起作用,至少它在概念上显示了你真正想要做的事情。