Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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返回Top X结果到对象查询_C#_Linq To Objects - Fatal编程技术网

C# 按顺序从Linq返回Top X结果到对象查询

C# 按顺序从Linq返回Top X结果到对象查询,c#,linq-to-objects,C#,Linq To Objects,以前:有人告诉我如何使用CompareTo返回特定范围内的姓氏,使用LINQ to对象按字母顺序排列 我剩下的问题,似乎错过了最初提出的“喂食狂潮”问题,实际上是在我测试了这个解决方案之后出现的。在前面的示例中,我有一个姓名列表: Adams Bentham Bickford Gillies Kelly Moore Peters Rutherford Smith Taylor Williams 亚当斯 边沁 比克福德 吉利斯 凯莉 摩尔 彼得斯 卢瑟福 史密斯 泰勒 威廉姆斯 我希望能够查询到G

以前:有人告诉我如何使用CompareTo返回特定范围内的姓氏,使用LINQ to对象按字母顺序排列

我剩下的问题,似乎错过了最初提出的“喂食狂潮”问题,实际上是在我测试了这个解决方案之后出现的。在前面的示例中,我有一个姓名列表:

Adams Bentham Bickford Gillies Kelly Moore Peters Rutherford Smith Taylor Williams 亚当斯 边沁 比克福德 吉利斯 凯莉 摩尔 彼得斯 卢瑟福 史密斯 泰勒 威廉姆斯 我希望能够查询到Gillies和Moore之间的所有名字,例如:

Gillies Kelly Moore 吉利斯 凯莉 摩尔 如果你想让球门门柱之间的每一个单独的名字都返回,无论发生什么,这都是很好的。例如,当你有大量的姓氏,并且你希望Gillies和Taylor之间的名字中最多有四个按字母顺序返回时,问题就出现了

因此,期望的输出是:

Gillies Kelly Moore Peters 吉利斯 凯莉 摩尔 彼得斯 然而,仅仅返回吉利斯和泰勒之间的四个结果就可以返回凯利、彼得斯、史密斯和泰勒,或者返回吉利斯、摩尔、卢瑟福和史密斯。基本上,这个查询会让你看一看你的单词,然后在目标栏之间选择任何四个旧单词

那么,我如何按字母顺序获得前4名的结果呢。当然,我可以编写第二个查询并返回子集,然后从中进行选择。。。但是,难道不应该有一种方法将这种行为集成到初始查询中吗

我和OrderBy试过几次,但到目前为止都不起作用。所以这一切都交给你们了

编辑:对于建议使用“take”的两位,我已经在使用take了。即使在我的查询中使用OrderBy或至少不使用OrderBy,它也不会按顺序“接受”。这是:

var allIDs = (from cust in dc.orders
              join item in dc.order_items on cust.orderid equals item.orderid
              join del in dc.deliveries on cust.deliveryid equals del.deliveryid
              join dt in dc.deliverytypes on del.deliverytype equals dt.deliverytypeid
              where eventcode == item.itemcode
              && dt.description == "Secure Post"
              && (cust.status == "OK" || cust.status == "PB")
              && cust.surname.CompareTo(surfrom ?? " ") >= 0
              && cust.surname.CompareTo(surto ?? "zzz") <= 0
              && (cust.trackingcode == null ? false : (bool)cust.trackingcode)==false
              orderby cust.surname, cust.initials, cust.ordercode
              select cust.orderid).Distinct().Take(ordermax);
var allIDs=(来自dc订单中的客户)
将dc.order中的项目与cust.orderid上的项目连接起来等于item.orderid
在dc中加入del.deliveryid等于del.deliveryid
在del.deliverytype上的dc.deliverytype中加入dt。deliverytype等于dt.deliverytypeid
其中eventcode==item.itemcode
&&dt.description==“安全邮件”
&&(客户状态==“正常”| |客户状态==“PB”)
&&客户姓氏比较(surfrom???)>=0
&&客户姓氏比较(苏尔托??“zzz”)
将获取枚举中的前四项

将获取可枚举项中的前四项。

使用“获取”LINQ方法获取前四项记录:

var query = (from name in originalList
    where name.CompareTo(fromName) >= 0 && name.CompareTo(toName) <= 0
    orderby name
    select name).Take(4);
var query=(来自原始列表中的名称
其中name.CompareTo(fromName)>=0&&name.CompareTo(toName)使用“Take”LINQ方法获取前4条记录:

var query = (from name in originalList
    where name.CompareTo(fromName) >= 0 && name.CompareTo(toName) <= 0
    orderby name
    select name).Take(4);
var query=(来自原始列表中的名称

其中name.CompareTo(fromName)>=0&&name.CompareTo(toName)从您的编辑中,看起来您正在按奇怪的顺序执行orderby和distinct:

这对我很有用(其中“allMyNames”只是一个列表)

var of interest=allMyNames
.Distinct()
其中(x=>x.CompareTo(from)>=0&&x.CompareTo(to)x)
.采取(4);

我更喜欢使用LINQ:)的扩展形式

从您的编辑中,看起来您正在执行orderby并以奇怪的顺序进行区分:

这对我很有用(其中“allMyNames”只是一个列表)

var of interest=allMyNames
.Distinct()
其中(x=>x.CompareTo(from)>=0&&x.CompareTo(to)x)
.采取(4);

我更喜欢使用LINQ:)的扩展形式

最后,我放弃并编写了一个复杂的LINQ语句来选择列表、首字母和姓氏,然后以这种格式进行第二次查询,以实现take要求。如果能从一次查询中返回ID列表,那就太好了。最后,我放弃并编写了一个复杂的LINQ语句来选择列表、首字母和surnames,然后以这种格式进行第二次查询,以实现take要求。如果从一次查询中返回ID列表还是不错的
   var ofInterest = allMyNames
                    .Distinct()
                    .Where(x => x.CompareTo(from) >= 0 && x.CompareTo(to) <= 0)
                    .OrderBy(x => x)
                    .Take(4);