【发布时间】:2019-04-12 07:53:30
【问题描述】:
我有一个名为 Kanjis 的两个属性的列表:
我想用它来更新另一个名为PhraseSources的列表的内容
public class PhraseSource
{
[PrimaryKey]
public string Id { get; set; }
public int PhraseNum { get; set; }
public string English { get; set; }
public string Kanji { get; set; }
public string WordType { get; set; }
public string FrequencyA { get; set; }
}
通过匹配 Kanji > Text 并使用 Code 更新 FrequencyA
这是可以用 LINQ 完成的,还是有更好的方法通过遍历短语Source 的每一行、检查 Kanjis 中的匹配条目并以这种方式进行更新来做到这一点?
这是我尝试过的 Salva 建议的代码:
(from sa in source
join d in psDb on sa.Text equals d.Kanji
let temp = d.FrequencyA = sa.Code
select 0).ToList();
给出错误:
ApplyFrequency.cs(14,14):错误 CS1941:其中一个的类型 join 子句中的表达式不正确。类型推断失败 呼吁“加入”。 (CS1941) (下载)
source.Join(psDb, s => s.Text, d => d.Kanji, (s, d) => d.FrequencyA = s.Code).ToList();
给出错误:
ApplyFrequency.cs(21,21):错误 CS0411:方法的类型参数 'Enumerable.Join(IEnumerable, IEnumerable, Func, Func, Func)' 不能从用法中推断出来。尝试 明确指定类型参数。 (CS0411) (下载)
注意事项:
当我被要求将 FrequencyA 更改为 int 时,我不得不使用此代码:
var source = original
.Select(x => new
{
Text = x.Text,
Code = Convert.ToInt32(x.Code.Substring(2))
})
.ToList();
【问题讨论】:
-
你可以join列表,迭代结果并更新它。
-
@Alan2 显示
source和psDb变量及其类型的声明