0

我有一个包含搜索词、点击等的实体列表。
用户应该能够比较实体之间的点击量 - 即在搜索开始时包含“免费样品”一词的所有实体并与在短语末尾包含短语“逮捕我”的所有实体。
我可以使用多个 foreach 和 switch 来做到这一点(因为用户选择了查询和字符串的一部分),但我知道通过使用 Linq 我可以使用“start with”和“end with”函数。你能指导我完成吗?

4

3 回答 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 回答