c# - 使用 linq 获取属性

标签 c# linq

这可能真的很简单,但只需要一些帮助来获得正确的语法! 假设我有 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/

相关文章:

c# - 客户端没有及时收到消息(TcpClient)

c# - 在 Linq To SQl .net 3.5 中调用函数

.net - LINQ 调用存储过程很慢

c# - linq子查询子集合到字符串

c# - 如何计算 LINQ(到数据集)中数据表列的总和?

c# - 使用 SSH.NET 上传到 SFTP 服务器失败,并出现 SftpPathNotFoundException : 'The system cannot find the path specified.'

c# - 带有两个标签的 Specflow 场景打开两个窗口

c# - TypeDescriptor.GetProperties 与 Type.GetProperties

c# - 如何进行服务器端 C# SQL 验证

c# - 如何在 WinForms 和 EntityFramework 中生成 Pivot Datagridview