我正在使用Entity Framework并已开始使用linq编写查询。
我有一个Store表,其中每个商店都有一个名称字段。我想要做的其中一个搜索是首字母,我正试图找到实现它的最佳方法。我认为最有效率。
大多数搜索只查找一个键,'A','B','C'等,但其中一个搜索的不同之处在于组'0-9'将包含一个键列表,一个用于0,一对一等等所以我的出发点是某种列表。
然后我需要说明商店名称是否以列表中的任何键开头,因为商店不会在表格中存储首字母。
有两件事我正在寻求帮助。首先,如我所概述的那样如何让linq正常工作。其次,有关这是否是回收数据的最佳/唯一方法或是否有更好的方法的任何建议。
答案 0 :(得分:6)
您的问题不是很清楚,但据我所知,您希望搜索以密钥列表中的密钥开头的商店。你可以这样做:
List<string> keys = new List<string>() { "A", "B", "M" };
var result = stores.Where(store => keys.Any(key => store.Name.StartsWith(key));
答案 1 :(得分: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)
答案 2 :(得分:0)