C# Linq到实体-两个键之间字符串的第一个字母
我正在使用实体框架,遇到了一个对某些扩展缺乏支持的问题 我有两个键(都是char)C# Linq到实体-两个键之间字符串的第一个字母,c#,linq,entity-framework,C#,Linq,Entity Framework,我正在使用实体框架,遇到了一个对某些扩展缺乏支持的问题 我有两个键(都是char)fromKey和toKey,我希望构造一个Where语句,搜索存储列表,并选择存储的第一个字母的位置。Name介于fromKey和toKey之间 string[0]不起作用,Substring不起作用-有人知道如何解决这个问题吗 子字符串方法的代码: public static IQueryable<Store> FindActiveByName() { var r = new ReadRepo
fromKey
和toKey
,我希望构造一个Where
语句,搜索存储列表
,并选择存储的第一个字母的位置。Name
介于fromKey
和toKey
之间
string[0]
不起作用,Substring
不起作用-有人知道如何解决这个问题吗
子字符串方法的代码:
public static IQueryable<Store> FindActiveByName()
{
var r = new ReadRepo<Store>(Local.Items.Uow.Context);
Tuple<string, string> range = Tuple.Create("0", "9");
return r.Find().Where(s => range.Item1 <= s.Name.Substring(0, 1) &&
s.Name.Substring(0, 1) <= range.Item2);
}
public静态IQueryable FindActiveByName()
{
var r=新的ReadRepo(Local.Items.Uow.Context);
Tuple range=Tuple.Create(“0”,“9”);
返回r.Find()。其中(s=>range.Item1您可以尝试以下操作:
string[] data = { "Alex", "Bob", "John", "Danny", "Roy" };
char fromKey = 'A', toKey = 'D';
var query = data.Where(d => (int)d.First() >= (int)fromKey && (int)d.First() <= (int)toKey);
string[]data={“亚历克斯”、“鲍勃”、“约翰”、“丹尼”、“罗伊”};
char fromKey='A',toKey='D';
var query=data.Where(d=>(int)d.First()>=(int)fromKey&&(int)d.First()我手头没有EF,因此这可能也不起作用,但您可以尝试以下解决方法:
首先生成一个包含from
到
字母的字符串。然后可以使用Contains
检查名称的第一个字符是否在生成的字母中:
public静态IQueryable FindActiveByName()
{
var r=新的ReadRepo(Local.Items.Uow.Context);
Tuple range=Tuple.Create('0','9');
变量字母=可枚举
.Range(Range.Item1,(int)Range.Item2-(int)Range.Item1+1)
.Select(x=>((char)x).ToString()
返回r.Find(),其中(s=>letters.Contains(s.Name.Substring(0,1));
}
或者你有明显的工作方法:
- 用SQL编写查询(EF有API来执行任意查询并生成实体)
- 在
的Where
前面插入一个.ToArray()
,这将强制查询求值和名称。子字符串将在客户端进行比较
您的代码实际存在的唯一问题是.NET字符串
类没有重载的=
运算符。因此,代码不会编译(它与实体框架无关)。您可以使用字符串代替运算符。CompareTo
方法:
public static IQueryable<Store> FindActiveByName()
{
var r = new ReadRepo<Store>(Local.Items.Uow.Context);
Tuple<string, string> range = Tuple.Create("0", "9");
return r.Find().Where(s =>
range.Item1.CompareTo(s.Name.Substring(0, 1)) <= 0 &&
s.Name.Substring(0, 1).CompareTo(range.Item2) <= 0);
}
public静态IQueryable FindActiveByName()
{
var r=新的ReadRepo(Local.Items.Uow.Context);
Tuple range=Tuple.Create(“0”,“9”);
返回r.Find(),其中(s=>
range.Item1.CompareTo(s.Name.Substring(0,1))子字符串应该可以工作。你能发布你的代码吗?@nemesv-这是代码。很明显,元组将被提供给方法。Singh C-不,恐怕First()也不受支持。谢谢你的帮助。
public static IQueryable<Store> FindActiveByName()
{
var r = new ReadRepo<Store>(Local.Items.Uow.Context);
Tuple<string, string> range = Tuple.Create("0", "9");
return r.Find().Where(s =>
range.Item1.CompareTo(s.Name.Substring(0, 1)) <= 0 &&
s.Name.Substring(0, 1).CompareTo(range.Item2) <= 0);
}