Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到实体-两个键之间字符串的第一个字母_C#_Linq_Entity Framework - Fatal编程技术网

C# Linq到实体-两个键之间字符串的第一个字母

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

我正在使用实体框架,遇到了一个对某些扩展缺乏支持的问题

我有两个键(都是char)
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);
}