林克的代表

本文关键字:林克 | 更新日期: 2023-09-27 18:32:09

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

林克的代表

听起来你想要一个以"免费样品"开头的东西列表,然后是另一个以"逮捕我"结尾的东西。 假设这就是你想要的,你会做这样的事情。

// 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"))

LINQ Where()返回一组满足条件的实体:

var filtered = entities.Where(e => 
                         e.SearchPattern.StartsWith("Start")
                         &&
                         e.SearchPattern.EndsWith("End"));

LINQ Single()/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"));

有关完整列表,请参阅可枚举类方法

你提到的函数只是字符串函数。 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);

这两个查询返回分别以某个字符串结尾的短语的索引。我使用接受索引作为第二个参数的选择重载。