C# lambda 加入和更新

Posted

技术标签:

【中文标题】C# lambda 加入和更新【英文标题】:C# lambda Join & Update 【发布时间】:2021-08-28 00:32:04 【问题描述】:

我使用实体框架。 类列表是

class List

public string cid  get; set; 
public string type get; set; 
public string memo get; set; 
public DateTime sdate get; set; 

数一下大约 50 个。

我想加入关于成员的表格。 成员的专栏是: 身份证,身份证,姓名,地址

var result =
thelist.Where(w => !string.IsNullOrWhiteSpace(type)).Join(db.members,list => list.cid,member => member,(list,member) => list).ToList();

-> 不确定是否有效。

我想获取表成员中 cid 的列表记录。 并用成员的名字更新列表的备忘录。

我可以使用 lambda 吗??

【问题讨论】:

你真的不应该修改 lambda 中的东西 您的代码和您对代码的描述似乎不匹配。目前还不是很清楚你要做什么。你能澄清一下吗? 如果我的加入正确无误,那就是:from w in thelist where !string.IsNullOrWhiteSpace(w.type) join m in db.members on w.cid equals m select w。对吗? 具体是什么实体框架,什么版本?我不会调用类 List 以避免与 List; 混淆。当然,您可以想出一个更好、更不乏味/通用的名称。公共属性应以大写字母开头。如果您因此为例如 Json 序列化目的命名了您的道具,您应该注意大多数序列化程序都有指定要使用的 Json 属性名称的方法,因此您不必将您的 c# 绑定到蹩脚的 Json 名称。 newtonsoft [JsonProperty("sdate")]public DateTime AppointmentDate.. 的示例 您是否映射了列表和成员之间的关系?如果没有,你应该。它会让生活更轻松 【参考方案1】:

如果您要求避免使用 SQL,当然可以。但是您需要以特定方式设置表关系。

你应该在类中定义你的键和外键:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
public class Parent

    [Key]
    public string cid  get; set; 
    public string type get; set; 
    public string memo get; set; 
    public DateTime sdate get; set; 

    public virtual ICollection<Members> get;set;


public class Members
    public virtual Parent Parent get;set;
    [Key]
    public int id get;set;
    [ForeignKey("Parent")] //This should match database table name
    public string cid get;set;
    //...other data types

您应该根据变量名称、可空性(如果数据库中有可空变量,确保它在类中可以为空:int -> int?)准确地镜像数据库,外键应该匹配。

一旦您以一种简洁的方式设置了所有内容,就可以轻松地将子表值连接到父表:

//...

List<Parent> resultsWithChildren = _dbContext.Parent.Where(x => x.cid == "someid").Include(x => x.Members).ToList();

通过添加“包含”,EntityFramework 将加载它可以自动找到链接的所有表,这就是关系设置很重要的原因。

然后,您可以随心所欲地简单地遍历数据。每个 'resultWithChildren' 变量都会有一个对应的 'Members' 列表。

【讨论】:

以上是关于C# lambda 加入和更新的主要内容,如果未能解决你的问题,请参考以下文章

C# Lambda表达式

C# Lambda表达式

csharp 加入LINQ和Lambda

使用 C# 使用 lambda 表达式过滤和添加值

C#中的委托,匿名方法和Lambda表达式

C# 10 新特性 —— Lambda 优化