C# 数组的基础用法

常规操作之笔记摘要!!
 C#基础知识之事务的用法
using (var _trans = new TransactionScope()){

       _trans.Complete();//提交事务

       _trans.Dispose();//报错时回撤事务

}

C#基础知识之GUID格式判定

         string guidString = "123e4567-e89b-12d3-a456-426655440000";
            if (Guid.TryParse(guidString, out Guid result))
            {
                Console.WriteLine("这是一个有效的GUID");
            }
            else
            {
                Console.WriteLine("这不是一个有效的GUID");
            }
 C#和DataTable的用法:例如:数据库查询了50条数据,但是根据代码中其他条件,只需要显示N条数据或者复制 DataTable的数据时使用
DataTable a = new DataTable();
DataTable b = new DataTable();
a.Merge(b);  //复制 DataTable 的结构到新的 DataTable -->两个的数据结构必须保持一致
a = b.AsEnumerable().Take(1).CopyToDataTable();//作用:把 DataTable 的第一条数据复制到新的 DataTable 中-->Take()的值必须是 <=DataTable的行数

C#实体类使用反射设置属性值给实体类赋值


参考一:
  NullifyDateTimeIfMatch(list);----调用

  protected static void NullifyDateTimeIfMatch<T>(IEnumerable<T> items, DateTime? targetDate = default)
 {
     if (items == null) return;
     if (targetDate == default) targetDate = new DateTime(1900, 1, 1);

     foreach (var item in items)
     {
         if (item == null) continue;

         var properties = item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

         foreach (var property in properties)
         {
             // 检查是否为 DateTime 或 DateTime? 类型
             if (property.PropertyType == typeof(DateTime) || property.PropertyType == typeof(DateTime?))
             {
                 var value = property.GetValue(item)!.ToDateTime();
                 if (value.HasValue && targetDate.HasValue)
                 {
                     if (value.Value.Date == targetDate.Value.Date)
                     {
                         property.SetValue(item, null);
                     }
                 }
             }
         }
     }
 }
      
      参考二:
    var a = new 实体类();
      var b = a.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
      foreach (var item in b)
      {
      item.SetValue(item,null);
      }
      
 
序列化和反序列化
 JsonConvert.SerializeObject()--->将对象转换为JSON格式
 JsonConvert.DeserializeObject()--->将 JSON 字符串转换为对象
数组的基础用法
1、C# 中数组数据排序时,字段对应的先后循序
主要排序(OrderBy), 次要排序(ThenByDescending(降) ,ThenBy(升))
list.OrderBy(t => t.字段).ThenByDescending(t => t.字段).ThenBy(t => t.字段))

2、将字符串分割成数组,并对比输出
string a = "1,2,3,4,5";
string b = "1,2,5,6";
// 将字符串分割成数组
var arrayA = a.Split(',');
var arrayB = b.Split(',');
// 使用 LINQ 的 Except 方法找出在 b 中但不在 a 中的元素
var result = arrayB.Except(arrayA);
// 将结果转换回字符串
string finalResult = string.Join(",", result);
 
Dictionary的用法

定义实体:
public class KeyValue : Dictionary<string, object> { }

数组:
var KeyValueList = new List<KeyValue>();
//自定义对象数据
 var Info = new KeyValue(){
     {"aa",值} 
 }
 //动态添加
 Info[列]=值;
 
 Info:{
      "aa":'值'
 }
 KeyValueList:[{},{},{}]

键值对数组的用法

c# 自定义数组用法:


var  a= new List<object>{
 new {Key='', Value=''},
 new {Key='', Value=''}
}
  List<object> list = new List<object>();
  var item = new System.Dynamic.ExpandoObject() as IDictionary<string, object>;
   item["aa"] ="bb";
  list.Add(item);


var b=new JObject{
{"名称",值},
{"名称",值}
}.ToString();
最终结果:{"名称":"值","名称":"值"}
 
ExpandoObject的用法,类似于Dictionary,区别是不需要定义类
 
 dynamic data = new ExpandoObject();
     data.sss = "";//对象格式
      //以下是数组格式
       dynamic list = new List<ExpandoObject>();
       dynamic obj = new ExpandoObject();
      obj.a = ""; obj.b = "";
       list.Add(obj);
       data.list = list;

[[1,2,3],[1,2,3]]---->格式的数据实现

List<List<string>> aaa = new List<List<string>>();
 List<string> bbb = new List<string>();
  foreach (var c in ccc)
 {
     bbb.Add(c.值);
 }
 aaa.Add(subList);
JSON: System.Text.Json.JsonSerializer.Serialize(aaa);

根据前端JSON格式,将前端字段映射到后端字段并存储

[{"key":"sgdwId","value":"/"}] 
1. 定义带字段映射的实体类
public class YpData
{
    // 数据库字段映射字典
    private static readonly Dictionary<string, string> FieldMap = new()
    {
        {"单位", "sgdwId"}
    };
 
    // 动态数据存储
    public Dictionary<string, string> Data { get; } = new();
 
    // 数据库字段属性代理
    public string this[string fieldName] 
    {
        get => FieldMap.TryGetValue(fieldName, out var jsonKey) 
               && Data.TryGetValue(jsonKey, out var val) ? val : null;
        set 
        {
            if (FieldMap.TryGetValue(fieldName, out var jsonKey))
                Data[jsonKey] = value;
        }
    }
}
        2. JSON反序列化与数据填充
         public static YpData ParseFromJson(string json)
        {
            var data = new YpData();
            var keyValuePairs = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(json);

            foreach (var kvp in keyValuePairs)
            {
                if (kvp.TryGetValue("key", out var key) &&
                    kvp.TryGetValue("value", out var value))
                {
                    data.Data[key] = string.IsNullOrEmpty(value) ? null : value;
                }
            }
            return data;
        }
        3. 数据库字段访问示例
        var json = "[{\"key\":\"sgdwId\",\"value\":\"中铁集团\"}, ...]";
var entity = ParseFromJson(json);
 
// 通过数据库字段名获取值
Console.WriteLine(entity["单位"]);  // 输出:中铁集团
 
// 通过数据库字段名设置值
entity["日期"] = "2023-05-01";
Console.WriteLine(entity.Data["bprqId"]);  // 输出:2023-05-01

 

posted @ 2025-04-29 14:36  小鱼记忆  阅读(64)  评论(0)    收藏  举报