04.Linq总结

本文介绍了Linq语言查询的关键字使用方法,包括Distinct去除重复项、Select与SelectMany选择元素、Where进行筛选、ToDictionary等转换类型、First与FirstOrDefault查找元素、OrderBy排序、GroupBy分组等操作,并提供了引用类型使用Distinct的实现示例。

  Linq语言查询,部分关键字使用:

a)    Distinct,值类型可以直接筛除,对于引用类型需要实现接口IEqualityComparer<T>。
b)    Select、SelectMany,SelectMany返回的委托是IEnumerable<T>。而Select返回委托是IEnumerable<IEnumerable<T>>。
c)    Where查询条件,进行筛选。
d)    ToDictionary、ToArray()、ToList(),转换成对应类型。
e)    First、FirstOrDefault、Last、LastOrDefault、Find、FindOrDefault。其中如果First、Last、根据查询条件没有找出来具体数据的话则会抛出异常,而对于FirstOrDefault、LastOrDefault则不会抛出异常。
f)    OrderBy、OrderByDescending、ThenOrderBy、ThenOrderByDescending。主要是做排序使用,可以多次连接进行排序,例如:OrderBy(p => p.id). OrderByDescending(p => p.name);
g)    list.GroupBy(a => new { a.Name, a.ID }).Select(p => new { p.Key.ID, p.Key.Name, count = p.Sum(a => a.ModifyBy) }) 。关于GroupBy使用可以在进行Select或者是其他操作。
h)    list.take(5),取前N条数据,如果列表当中没有指定数量的数据,那么有多少数据就取多少数据。

  对于引用类型Distinct筛选实现:

ContractedBlock.gifExpandedBlockStart.gif代码
public class EqualityComparer<T> : IEqualityComparer<T>
where T : class
{
private string Fileds { get; set; }

public EqualityComparer(string fileds)
{
Fileds
= fileds;
}

public bool Equals(T x, T y)
{
return GetHashCode(x) == GetHashCode(y);
}

public int GetHashCode(T obj)
{
try
{
return Convert.ToInt32(typeof(T).GetProperty(Fileds).GetValue(obj, null));
}
catch
{
throw new NotImplementedException();
}
}
}
对于引用类型Distinct使用:
Dictionary<int, AssessmentActivity> l1 = list.Distinct(new EqualityComparer<AssessmentActivity>("ID")).ToDictionary(p => p.ID);

转载于:https://www.cnblogs.com/yangboyu/archive/2011/02/08/1949857.html

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using System.IO.Ports; using System.Collections; using System.Threading; using UnityEngine.UI; using JetBrains.Annotations; using System.Xml; using static UnityEditor.VersionControl.Asset; using Modbus.Device; public class STM32ModbusCommunication : MonoBehaviour { // 串口配置 private SerialPort serial = new SerialPort() { PortName = "COM2", // 根据实际情况修改 BaudRate = 9600, DataBits = 8, Parity = Parity.None, StopBits = StopBits.One, ReadTimeout = 1000, WriteTimeout = 1000 }; private ModbusSerialMaster master; void Start() { try { serial.Open(); Debug.Log("串口已连接"); master = ModbusSerialMaster.CreateRtu(serial); // 开启后台任务定期读取数据 StartCoroutine(ReadSensorData()); } catch (Exception ex) { Debug.LogError("串口连接失败:" + ex.Message); } } private void OnDestroy() { if (serial != null && serial.IsOpen) { serial.Close(); Debug.Log("串口已关闭"); } } IEnumerator ReadSensorData() { bool needDelay = false; while (true) { if (needDelay) { yield return new WaitForSeconds(5f); needDelay = false; } try { // 读取传感器数据 ushort temperature = master.ReadInputRegisters(1, 0x01, 1)[0]; ushort humidity = master.ReadInputRegisters(1, 0x02, 1)[0]; ushort accX = master.ReadInputRegisters(1, 0x03, 1)[0]; ushort accY = master.ReadInputRegisters(1, 0x04, 1)[0]; ushort accZ = master.ReadInputRegisters(1, 0x05, 1)[0]; // 更新全局变量或UI UpdateTemperatureAndHumidity(temper
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值