【发布时间】:2021-04-26 22:01:50
【问题描述】:
我有两张表,布局如下
username | displayname username| FirstName | surname
---------|------------ -----------------------------
foo test foo | andrew | blah
fa display
我要做的是在页面的左侧表格中显示所有displayname 条目。但是,如果右侧表中的 username 有匹配项,我希望将值 test 替换为 andrew。
示例:
username | displayname
---------|------------
foo andrew
fa display
一切都是字符串。
下面是我对我需要的尝试,但我把它搞砸了,因为它将firstname 值应用于我的第一个表中的每个条目。
_users = UserService.GetAll().ToList();
_updates = UserUpdateService.GetAll().ToList();
foreach (var user in _users)
{
foreach (var update in _updates)
if (user.FirstName != "" && user.UserName == update.UserName)
{
update.DisplayName = user.FirstName;
}
else
{
update.DisplayName = user.UserName;
}
}
有没有办法通过单个 LINQ 查询来做到这一点?
【问题讨论】:
-
正如您从字面上提到的那样,LINQ 中的 Q 代表 query,而不是 modify。因此,您想要实现的目标是不可能的 - 或者只能通过肮脏的黑客来实现。
-
您的代码在我看来相当不错。 LINQing 它不会给你带来任何好处,事实上它很可能会让你的代码更丑。
-
@HimBromBeere 问题是如果我在另一个表中有第二个条目并且“john”是名字值,那么“john”将应用于第一个表中的每个显示名称值
-
这与是否使用 LINQ 无关,而是与您的业务逻辑有关。 LINQ 只是语法糖,它绝对不会向您的代码添加任何行为。所以如果你不能用经典循环来做,你也不能用 LINQ 做。
-
@HimBromBeere 你能告诉我实现我需要的正确逻辑吗?
标签: c# list linq .net-core entity-framework-core