Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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查询_C#_Linq - Fatal编程技术网

C# 用于匹配的Linq查询

C# 用于匹配的Linq查询,c#,linq,C#,Linq,我正在尝试使用Linq返回一个列表,该列表按最匹配项和最不匹配项排序 我有一个由“;”分隔的“相关标记”或“关键字”字符串: a;BCDEFg 我在数据库中有一条记录a a;BCDEFg 我在数据库中还有一条记录B A.Bc 我想使用linq和return搜索数据库 一个列表,其中记录a位于列表的第一位,记录B位于第二位 尝试: dbContext2.Mains.where(x => x.VideoID == VideoID.ToString()) .whe

我正在尝试使用Linq返回一个列表,该列表按最匹配项和最不匹配项排序

我有一个由“;”分隔的“相关标记”或“关键字”字符串:

a;BCDEFg

我在数据库中有一条记录a

a;BCDEFg

我在数据库中还有一条记录B A.Bc

我想使用linq和return搜索数据库 一个列表,其中记录a位于列表的第一位,记录B位于第二位

尝试:

dbContext2.Mains.where(x => x.VideoID == VideoID.ToString())
                .where( x=> x.Tags.Contains(ListOfKeyWords))
                .single();

我们可以从制定一个方法开始,该方法将为一系列标记打分:


到目前为止你有没有尝试过什么?你能提供更多的细节吗?你是说你想返回一个列表,其中记录a是第一个,因为它只是有更多的“标记”?@sr28只是因为它匹配了更多的标记。是的,谢谢!:)您想“返回列表”,但代码以
.single()结尾。另外,您的代码无论如何也不会编译,因为
Where
Single
应该以大写字母开头。无论如何,用LINQ解决这个问题将是很困难的;即使在SQL中这样做也不容易。我不确定这是否可以转换为SQL,他正在使用EF,所以必须检查它,否则他可以简单地实现IComparable接口
public int GetScore(string contentTags, IEnumerable<string> relevantTags) {
      int score = 0;
      string[] splittedTags = contentTags.split(';');
      for(int i = 0; i < splittedTags.Length; i++) {
           if(relevantTags.Contains(splittedTags[i])) {
                score++;
           }
      }
      return score;
}
public class MyContext : DbContext {
      public DbSet<Main> Mains { get; set; }
}
IEnumerable<Main> records = myContext.Mains.OrderByDescending(x => GetScore(x.Tags, ListOfKeywords));