这可能真的很简单,但只需要一些帮助来获得正确的语法! 假设我有 2 个 A、B 类。
class A
{
string empname;
string id;
Child[] ca;
}
class Child
{
string id;
string name;
}
class B
{
string empname;
string id;
Child[] cb;
}
我想将 ca.name 映射到 cb.name。条件是 cb.id= ca.id。如何在 linq 中执行此操作?我尝试了以下方式:
ca.name=b.Child.select(x=>x.id.Equals(ca.id)) //here how to map the name property?
最佳答案
你说 map 是什么意思?您想要属性相等的名称?从您的示例的访问规范来看,您的类似乎有点偏离,并且从您的示例不确定您的数组名称是否真的是 cb 或 Child,我假设是 Child,但根据需要更正...
基本上有几种选择:
Single()
- 返回一个且仅返回一个,如果没有或返回多个则抛出。SingleOrDefault()
- 如果存在则返回一个,如果不存在则返回默认值,如果存在多个则抛出First()
- 如果存在则返回第一个,如果不存在则抛出。FirstOrDefault()
- 如果存在则返回第一个,如果不存在则返回默认值。
所有这些都有谓词重载,因此您不需要 where 子句。如果您已经知道您的项目是唯一的,我建议使用 FirstOrDefault()
,因为它会在找到它后停止,而 Single()
必须扫描整个列表,这可能会贵一点。
var item = b.Child.FirstOrDefault(x => x.id == ca.id);
if (item != null)
{
ca.name = item.name;
}
或者您可以使用带有空合并的 where/select 组合:
var name = b.Child.Where(x => x.id == ca.id)
.Select(x => x.name)
.FirstOrDefault() ?? "unknown";
关于c# - 使用 linq 获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5515475/