我有一个包含搜索词、点击等的实体列表。
用户应该能够比较实体之间的点击量 - 即在搜索开始时包含“免费样品”一词的所有实体并与在短语末尾包含短语“逮捕我”的所有实体。
我可以使用多个 foreach 和 switch 来做到这一点(因为用户选择了查询和字符串的一部分),但我知道通过使用 Linq 我可以使用“start with”和“end with”函数。你能指导我完成吗?
问问题
1669 次
3 回答
1
听起来您想要一个以“免费样品”开头的事物列表,然后是另一个以“逮捕我”结尾的事物列表。假设这就是你想要的,你会做这样的事情。
// Assumes myStuff is where all of your data is right now
var startsWith = myStuff.Where(x => x.MyString.StartsWith("free sample"));
var endsWith = myStuff.Where(x => x.MyString.EndsWith("arrest me"));
// Now you can do whatever comparisons between the two lists you need
当然,如果您只想要所有以“免费样品”开头并以“逮捕我”结尾的产品,您可以这样做
var hasBoth = myStuff.Where(x => x.MyString.StartsWith("free sample") && x.MyString.EndsWith("arrest me"))
于 2012-04-24T13:54:58.423 回答
1
LINQWhere()
返回一组满足条件的实体:
var filtered = entities.Where(e =>
e.SearchPattern.StartsWith("Start")
&&
e.SearchPattern.EndsWith("End"));
LINQSingle()/SingleorDefault()
返回满足条件的单个实体,如果找到多个实体 - 将引发异常。
var filtered = entities.Single(e =>
e.SearchPattern.StartsWith("Start")
&&
e.SearchPattern.EndsWith("End"));
LINQ First()
/Last()
返回给定条件的第一个/最后一个实体...
var filtered = entities.First(e =>
e.SearchPattern.StartsWith("Start")
&&
e.SearchPattern.EndsWith("End"));
有关完整列表,请参阅Enumerable 类方法
于 2012-04-24T13:54:14.287 回答
0
您提到的函数只是字符串函数。s.StartsWith("abc")
和s.EndsWith("xyz")
。在 LINQ 查询中,您可以在 where 子句中使用它们。
var startIndexes = phrases
.Where(p => p.StartsWith("free sample")
.Select((p, i) => i);
var endIndexes = phrases
.Where(p => p.EndsWith("arrest me")
.Select((p, i) => i);
这两个查询返回分别以某个字符串开头和结尾的短语的索引。我使用接受索引作为第二个参数的 select 重载。
于 2012-04-24T13:58:39.807 回答