c# - 列表比较和替换匹配条件linq C#
问题描述
public class UserValues
{
public string UserId { get; set; }
public int FieldId { get; set; }
public string FieldValue { get; set; }
}
public class LookupMeta
{
public int FieldId { get; set; }
public int Id { get; set; }
public int FieldValueId { get; set; }
public string Title { get; set; }
}
从 DB 中读取后,我将其保存在 2 个不同的列表中。
现在我想将这两个列表与
FieldId
==FieldId
- 和
FieldValue
等于Id
然后替换FieldValue
fromuservalues
到FieldValueId
fromlookupMeta
UserValues
.Where(x => LookupMeta.Any(y =>
y.FieldId == x.FieldId &&
y.FieldValueId.Equals(x.FieldValue)))
.Select(x => x.FieldValue.Replace(x.FieldValue, ???))
我也在看这个链接。我对两个列表比较和替换的 C# LINQ 代码感到震惊
在 List 中这样做是好事还是有其他优化的方法?
解决方案
如果我正确地跟随你,那么.Join()
LINQ 中的方法可能对你有用。在这里,我用它来完成我认为你所追求的。
UserValues
.Join(
LookupMeta,
uv => new { uv.FieldId, uv.FieldValue },
lm => new { lm.FieldId, lm.FieldValueId },
(uv,lm) => {
uv.FieldValue = lm.FieldValueId;
return uv;
}
);
该方法中的第二行和第三行从源表构建匿名对象。匹配这些值以建立链接。
最后一行将连接的条目作为输入,然后给出您的输出。在您的情况下,我只返回 UserValues 条目。但在此之前,我将其“FieldValue”属性更改为 LookupMeta 条目的“FieldValueId”属性。
你有一些不一致的地方。例如,您在段落中谈论将 FieldValue 与 Id 匹配,但在代码中您将 FieldValue 与 FieldValueId 匹配。此外,您==
在一个比较和另一个比较.Equals()
中使用。这里没有错误的答案。我只是不知道你的底层对象。所以你可能需要稍微修改我的代码才能得到你想要的。但它显示了我希望对你有用的一般策略。
推荐阅读
- python - 在 python 直方图上绘制两个系列的问题
- android - 查看 Recycler 的模型查看项目
- node.js - NodeJS原型函数不等待结果
- python - 如何正确打印 for 循环(Python)的整个结果?
- javascript - NodeJS Sqlite db.each 未运行
- delphi - 复制字典的正确方法是什么?
- c# - Aspose.Total for .NET 是否支持 .Net Core?
- search - Google 自定义搜索问题:由于达到每日限制,请求受到限制
- html - 如何显示图像全屏直到加载页面完成?
- c# - c# form - 如何使用 Autoscroll 进行 .onscroll?