这是this问题的后续行动,但背景已发生变化。打破已接受的解决方案。
这次我正在尝试使用SubSonic,但它使用之前接受的解决方案抛出错误消息
System.NotSupportedException: The method 'get_Chars' is not supported
...
Line 36: char[] nums = "0123456789".ToCharArray();
Line 37:
Line 38: var b = repository.GetAll().Where(q => nums.Contains(q.BrukerIdent[0])).ToList();
Line 39:
Line 40:
据我所知,q.BrukerIdent
是一个字符串。所以我有点抛出......
答案 0 :(得分:2)
忘记LINQ - 不要使用它。有一种更好的方法来实现您的目标。使用SQL。如果你刚刚使用SQL,那么你已经已经了 - 它只是一个basic pattern search。
亚音速?使用CodingHorror
并使用适当的SQL。
CodingHorror
是SubSonic程序集中的类。它为您提供了一种方法来执行特定的,手写的SQL实例,其中尝试使用LINQ实现相同的结果即使不是不可能也很困难,因此完全浪费时间。
您还可以执行CodingHorror
查询,并要求它将结果作为强类型对象的列表提供给您。
以下是使用CodingHorror来解决您的问题,但您必须填写一些细节(表名,类型名称)。
var query = new CodingHorror(@"SELECT * FROM YourTableHere
WHERE BrukerIdent LIKE '[a-z0-9]%'");
var matchingItems = query.ExecuteTypedList<YourTypeHere>();
此外,使用SubSonic还有一些外流,一般来说甚至更大的ORM。我建议查看PetaPoco(或Massive或Dapper等)。 PetaPoco的作者受到他在使用SubSonic的项目中经常使用CodingHorror
的经验的驱使。
答案 1 :(得分:1)
您是否尝试过使用Substring
代替字符索引器?
string[] nums = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };
var b = repository.GetAll().Where(q => nums.Contains(q.BrukerIdent.Substring(0, 1))).ToList()
注意我必须使nums
成为字符串[]而不是char [],因为Substring()返回的字符串不是char。
如果运行仍有问题,有时SubSonic喜欢调用.Contains()
的对象而不是IEnumerable,所以你可能需要这样做:
var nums = (new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" }).AsEnumerable();
答案 2 :(得分:0)
你是否试图在不使用lambda函数和其他东西的情况下制作它以查看问题所在?
答案 3 :(得分:0)
需要将linq表达式转换为有效的sql表达式。
在我看来,您使用的IQueryableProvider不支持getChars方法(q.BrukerIdent
上的索引器)。