微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LINQ’join’期待一个平等,但我想使用’contains’

这是一个小小的拼写错误的项目,我正在修补,并希望得到一些投入,我可能做错了.我有一个“字典”的字母及其各自的分数和单词列表.我的想法是找到每个单词中的字母,并将得分加在一起.
// Create a letter score lookup
var letterscores = new List<Letterscore>
                       {
                           new Letterscore {Letter = "A",score = 1},// ...
                           new Letterscore {Letter = "Z",score = 10}
                       };

// Open word file,separate comma-delimited string of words into a string list
var words = File.OpenText("c:\\dictionary.txt").ReadToEnd().Split(',').ToList();                           

// I was hoping to write an expression what would find all letters in the word (double-letters too) 
// and sum the score for each letter to get the word score.  This is where it falls apart.
var results = from w in words
          join l in letterscores on // expects an 'equals'
          // join l in letterscores on l.Any(w => w.Contains(
          select new
                     {
                         w,l.score
                     };

任何帮助将不胜感激.
谢谢.

解决方法

你不能,基本上 – 加入LINQ总是一个等等.你可以达到你想要的效果,但不能加入.这里有一个例子:
var results = from w in words
              from l in letterscores
              where l.Any(w => w.Contains(l.Letter))
              select new { w,l.score };

我认为这是你试图用你的查询,虽然它不会给你的单词得分.对于完整的单词分数,我会建立一个字母从字母到得分,像这样:

var scoreDictionary = letterscores.ToDictionary(l => l.Letter,l => l.score);

然后,您可以通过将每个字母的得分相加来找到每个单词的得分:

var results = from w in words
              select new { Word = w,score = w.Sum(c => scoreDictionary[c]) };

或不作为查询表达式:

var results = words.Select(w => new { Word = w,score = w.Sum(c => scoreDictionary[c]) });

原文地址:https://www.jb51.cc/mssql/75540.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐