C# 按顺序从Linq返回Top X结果到对象查询
以前:有人告诉我如何使用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,它也不会按顺序“接受”。这是: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
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);