`

c# - Linq's Select method as the Map function

    博客分类:
  • C#
c# 
阅读更多

If you comes from a functional programming language background, you will find that you are missing the Map function (literally) speakingly ..
However, the Select code is used as the de facto Map function. I have some examples, but I have to admit that sme of the examples are rather contrived. 

You can apply the Select as it is which is do a whole ranslation of the client data. while you can also provide certain predicate , which you can use as a mean to do filtering.
You have a class that is called PnL, and hat maps to the Table row data 

 

    internal class Data
    {
        #region Fields

        private string _book;
        private string _tradeType;
        private string _sector;
        private string _riskType;
        private string _ccy;
        private string _category;
        private string _tenure;
        private double _riskValue;
        private double _pnlValue;

        #endregion

        #region Public Properties

        [Column(Name = "Book", DataType = typeof(string))]
        public string Book
        {
            get { return _book; }
            private set { _book = value; }
        }

        [Column(Name = "TradeType", DataType = typeof(string))]
        public string TradeType
        {
            get { return _tradeType; }
            private set { _tradeType = value; }
        }

        [Column(Name = "Sector", DataType = typeof(string))]
        public string Sector
        {
            get { return _sector; }
            set { _sector = value; }
        }

        [Column(Name = "RiskType", DataType = typeof(string))]
        public string RiskType
        {
            get { return _riskType; }
            set { _riskType = value; }
        }

        [Column(Name = "Ccy", DataType = typeof(string))]
        public string Ccy
        {
            get { return _ccy; }
            set { _ccy = value; }
        }

        [Column(Name = "Category", DataType = typeof(string))]
        public string Category
        {
            get { return _category; }
            set { _category = value; }
        }

        [Column(Name = "Tenure", DataType = typeof(string))]
        public string Tenure
        {
            get { return _tenure; }
            set { _tenure = value; }
        }

        [Column(Name = "PnL", DataType = typeof(double))]
        public double PnLValue
        {
            get { return _pnlValue; }
            set { _pnlValue = value; }
        }

        [Column(Name = "Risk", DataType = typeof(double))]
        public double RiskValue
        {
            get { return _riskValue; }
            set { _riskValue = value; }
        }

        #endregion
    }

 

and then you have a class where you used as data model to  process. and the PnLDataModel looks like this:

[ObjectId("Key")]
    internal class DataModel : ICloneable
    {
        #region Fields

        private Tuple<string, string, string, string, string, string, string> _key;
        private string _book;
        private string _tradeType;
        private string _sector;
        private string _riskType;
        private string _ccy;
        private string _category;
        private string _tenure;
        private double _riskValue;
        private double _pnlValue;

        #endregion

        #region Constructors

        public DataModel(
            string book,
            string tradeType,
            string sector,
            string riskType,
            string ccy,
            string category,
            string tenure)
        {
            Book = book;
            TradeType = tradeType;
            Sector = sector;
            RiskType = riskType;
            Ccy = ccy;
            Category = category;
            Tenure = tenure;
            _key = new Tuple<string, string, string, string, string, string, string>(
                book,
                tradeType,
                sector,
                riskType,
                ccy,
                category,
                tenure);
        }

        #endregion

        #region Public Properties

        public Tuple<string, string, string, string, string, string, string> Key
        {
            get
            {
                return _key;
            }
        }

        public string Book
        {
            get { return _book; }
            private set { _book = value; }
        }

        public string TradeType
        {
            get { return _tradeType; }
            private set { _tradeType = value; }
        }

        public string Sector
        {
            get { return _sector; }
            private set { _sector = value; }
        }

        public string RiskType
        {
            get { return _riskType; }
            private set { _riskType = value; }
        }

        public string Ccy
        {
            get { return _ccy; }
            private set { _ccy = value; }
        }

        public string Category
        {
            get { return _category; }
            private set { _category = value; }
        }

        public string Tenure
        {
            get { return _tenure; }
            private set { _tenure = value; }
        }

        public double PnLValue
        {
            get { return _pnlValue; }
            set { _pnlValue = value; }
        }

        public double RiskValue
        {
            get { return _riskValue; }
            set { _riskValue = value; }
        }

        #endregion

        #region ICloneable

        public object Clone()
        {
            return new DataModel(
                Book,
                TradeType,
                Sector,
                RiskType,
                Ccy,
                Category,
                Tenure)
            {
                PnLValue = PnLValue,
                RiskValue = RiskValue
            };
        }

        #endregion
    }

 and you will need to convert from one type to another, so you can do this:

private DataModel DataProviderToModel(Data Data)
        {
            return new DataModel(
                Data.Book,
                Data.TradeType,
                Data.Sector,
                Data.RiskType,
                Data.Ccy,
                Data.Category,
                Data.Tenure)
                       {
                           PnLValue = Data.PnLValue,
                           RiskValue = Data.RiskValue
                       };
        }



        private IEnumerable<DataModel> DataProviderToModel(IEnumerable<Data> Datas)
        {
            return Datas.Select(DataProviderToModel);
        }

Basically you defined a MapMethod and the used that to apply on IEnumerable<Source> to IEnumerable<Target>

分享到:
评论

相关推荐

    C#/.NET - LInq中SelectMany方法

    总之,`SelectMany`是C#和Linq中的一个关键方法,它提供了一种优雅的方式,从复杂的、多层次的数据结构中提取和组合信息。通过熟练掌握`SelectMany`,开发者可以更高效地处理数据,编写出简洁且易于理解的代码。在...

    calcite-linq4j-1.2.0-incubating-API文档-中文版.zip

    赠送jar包:calcite-linq4j-1.2.0-incubating.jar; 赠送原API文档:calcite-linq4j-1.2.0-incubating-javadoc.jar; 赠送源代码:calcite-linq4j-1.2.0-incubating-sources.jar; 赠送Maven依赖信息文件:calcite-...

    C#-Linq 中的日志功能实现.rar

    在.NET框架中,C#是一种常用的编程语言,而LINQ(Language Integrated Query,语言集成查询)是C#的一个重要特性,它为处理数据提供了一种更简洁、更强大的方式。本资源“C#-Linq 中的日志功能实现.rar”显然是关于...

    calcite-linq4j-1.2.0-incubating.jar

    calcite-linq4j-1.2.0-incubating.jar

    C# sql-linq-lambda

    根据给定文件中的标题、描述、标签以及部分内容,我们可以总结出以下有关C#中的SQL、LINQ和Lambda表达式之间的转换知识点。 ### C#中的SQL、LINQ与Lambda表达式的对比 #### 1. 基础查询 **SQL:** ```sql SELECT * ...

    PyPI 官网下载 | py-linq-1.2.5.tar.gz

    本文将详细探讨PyPI中的一个特定资源——"py-linq-1.2.5.tar.gz",这是一款基于Python的库,旨在为Python开发者带来类似C# LINQ(Language Integrated Query)的功能。 首先,我们来理解什么是LINQ。LINQ是微软.NET...

    开源项目-ahmetb-go-linq.zip

    go-linq-master是这个开源项目的主要源代码目录,其中包含了实现LINQ功能的所有Go源文件和相关文档。通过深入这个项目,我们可以学习如何在Go语言中构建和使用类似LINQ的查询接口。 该项目的核心概念是提供一种链式...

    前端开源库-async-linq.zip

    《深入解析前端开源库Async-Linq》 在前端开发领域,高效的代码管理和数据处理是提升应用性能的关键。Async-Linq,作为一个开源库,为JavaScript和TypeScript开发者提供了一种强大的异步 LINQ(Language Integrated...

    前端开源库-async-linq

    【前端开源库-async-linq】是一个专门为JavaScript设计的异步LINQ库,它为JavaScript开发者带来了.NET开发者熟悉的Language Integrated Query (LINQ) 模式。LINQ是一种在.NET框架中处理数据的强大工具,它提供了统一...

    C# + linq 视频

    根据提供的文件信息,“C# + linq 视频”这一标题和描述中提及的“文档里有下载地址和密码, 很不错的视频教程”,我们可以从中提取出与C#编程语言及LINQ技术相关的知识点。 ### C#编程语言 C#(读作C Sharp)是一...

    Angular-LINQ.zip

    Angular-LINQ.zip,语言集成查询的typescript实现(linq)(ecmascript 2015)该库是使用typescript和javascript语言的最新特性实现linq的持续努力(对于es5兼容库,请查看linq-es5分支)。这个库是用typescript实现...

    Pro-Linq -in -c# 2010

    本书《ProLINQ: Language Integrated Query in C# 2010》专注于C# 2010版本中的语言集成查询(LINQ)技术。书中旨在通过丰富的示例代码,为读者提供一个深入理解LINQ及其相关C# 4.0语言特性的资料库。 LINQ技术作为...

    高清彩版 pro-linq-language-integrated-query-in-c#

    本书《Pro LINQ: Language Integrated Query in C# 2010》是关于如何使用C#语言进行集成查询(LINQ)的权威指南。作者Adam Freeman和Joseph C. Rattz, Jr. 深入讲解了LINQ的原理和应用,书中内容丰富,包括了大量的...

    dotnet-Linq:dotnet-Linq

    在.NET框架中,Linq(Language Integrated Query,语言集成查询)是C#编程的一个核心特性,它极大地简化了数据查询操作。Linq提供了一种在各种数据源上进行统一查询的方式,包括数组、集合、数据库、XML等。下面将...

    c#使用Linq实现SQL数据库的增、删、改、查

    在C#编程中,LINQ(Language Integrated Query,语言集成查询)是一种强大的工具,它允许开发者使用类似SQL的语法在代码中操作各种数据源,包括SQL Server数据库。本教程将详细讲解如何使用C#的LINQ来实现SQL数据库...

    dynamic-linq-query-builder:一个真正通用和动态的linq查询生成器,可满足jQuery QueryBuilder和其他动态linq查询生成需求

    dynamic-linq-query-builder是一个小型库,允许任何.Net框架类集合在运行时动态过滤。 功能(v1.2.0) 从任何集合和过滤器组合生成IQueryable 可以根据需要对多个字段进行复杂的分组查询 通过点表示法支持嵌套...

    课件-LINQ简介.zip

    LINQ(Language Integrated Query,语言集成查询)是.NET框架中的一项重要特性,自.NET 3.5版本引入,它为C#和VB.NET等编程语言提供了强大的查询能力,使得开发者能够以更加直观和一致的方式处理各种数据源,如集合...

    lambda-LINQ-SQL对照表

    在编程领域,Lambda LINQ(Language Integrated Query)是.NET框架中的一个强大工具,它允许开发者以声明性方式处理数据,类似于SQL查询。Lambda表达式是LINQ的核心部分,它提供了一种简洁的方式来定义匿名函数。...

    C#Linq经典资料

    C# Linq(Language Integrated Query,语言集成查询)是.NET框架的一个重要组成部分,它为C#程序员提供了一种直观、简洁的方式来处理各种数据源,包括集合、数组、XML、数据库等。Linq允许开发者使用相同的查询语法...

    Python库 | python-linq-2.0.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:python-linq-2.0.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics