0

我正在使用实体框架并开始使用 linq 编写查询。

我有一个商店表,其中每个商店都有一个名称字段。我想做的搜索之一是首字母,我正在努力寻找实现它的最佳方法。最好我的意思是最有效的。

大多数搜索只查找一个键,“A”、“B”、“C”等,但其中一个搜索的不同之处在于组“0-9”将包含一个键列表,一个用于 0,一个用于 1等等。所以我的出发点是某种列表。

然后我需要说明一个 Store 名称是否以列表中的任何键开头,因为 Store 不会将首字母存储在表中。

有两件事我正在寻求帮助。首先,如何让 linq 像我所概述的那样工作。其次,关于这是否是恢复数据的最佳/唯一方法或是否有更好的方法的任何建议。

4

3 回答 3

6

您的问题不是很清楚,但据我了解,您想搜索以在密钥列表中找到的密钥开头的商店。你可以这样实现:

List<string> keys = new List<string>() { "A", "B", "M" };
var result = stores.Where(store => keys.Any(key => store.Name.StartsWith(key));
于 2012-09-06T15:03:47.813 回答
1

如果查询可能不同,那么对于字母:

stores.Where(s=>s.Name.First == c);

对于数字:

stores.Where(char.IsDigit);

如果它们必须相同,那么我建议一个字符范围:

stores.Where(s=> c1 <= s.Name.First && s.Name.First <= c2)

如果需要,您可以用元组表示范围:

Tuple<char, char> range = Tuple.Create('A', 'A');
//Tuple<char, char> range = Tuple.Create('0', '9');
stores.Where(s=> range.Item1 <= s.Name.First && s.Name.First <= range.Item2)

编辑:使用实体框架中的功能

Tuple<char, char> range = Tuple.Create('A', 'A');
//Tuple<char, char> range = Tuple.Create('0', '9');
stores.Where(s=> range.Item1 <= s.Name.Substring(0, 1) && s.Name.Substring(0, 1) <= range.Item2)
于 2012-09-06T15:18:49.840 回答
0

我在另一个线程上问了一个更具体的问题。

这是答案:

Linq to entity - 2个键之间的字符串的第一个字母

于 2012-09-06T19:14:36.273 回答