c# - 如何使用另一个列表中的数据更新列表的内容?
问题描述
我有一个名为的两个属性的列表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 完成的事情,还是有更好的方法通过遍历短语来源的每一行,检查 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:连接子句中的表达式之一的类型不正确。对“加入”的调用中的类型推断失败。(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();
解决方案
您只能通过 LINQ 更新列表。你能得到的最接近的是:
static void Main(string[] args)
{
List<SomeClass> scl = new List<SomeClass>();
List<OtherClass> ocl = new List<OtherClass>();
foreach (var item in scl)
item.FrequencyA = ocl.Where(i => i.Text == item.Kanji).FirstOrDefault()?.Code ?? null;
}
// sample classes that reflect relevant properties
public class SomeClass
{
public string FrequencyA { get; set; }
public string Kanji { get; set; }
}
public class OtherClass
{
public string Code { get; set; }
public string Text { get; set; }
}
推荐阅读
- sql - 在我的过程中将两个不同的选择合并到同一个结果表中?
- r - 对于 R eg plot(GumbelDistribution) 中的极端分布
- sql - 获取表的特定行的成本与获取所有行的成本相比如何?
- angular - Angular 9:路由导航参数问题
- vb.net - 打开文件对话框中的有限多选?
- django - Django count manytomany 关系显示错误的数字
- php - Form refreshes before getting data from input
- json - 在 Go 中扁平化 JSON 有困难
- api - 当 API 不支持偏移时如何从偏移中获取结果(HERE Maps API)
- haskell - 定义为“数据 BB a = L | K (BB a) a (BB a) deriving (Show)”的树的 Haskell 预序树遍历