如果我的条件匹配,如何从另一个列表中选择项目?

如何解决如果我的条件匹配,如何从另一个列表中选择项目?

我有一个有关C#列表的查询。

我有两种不同类型的列表(account和accountDescriptionHistory)。列表中同时显示accountID和accountdescription两列。

var account = new List<Account>();
var accountDescriptionHistory = new List<AccountDescriptionHistory>();

现在,我想根据以下条件准备结果列表。

  1. 如果accountID匹配,请从accountDescriptionHistory列表中选择一个帐户描述。
  2. 结果列表应为List();

类定义

public class Account
{

    /// <summary>
    /// The account number
    /// </summary>
    public virtual string AccountNumber { get; set; }

    /// <summary>
    /// The account's description
    /// </summary>
    public virtual string Description { get; set; }
}

帐户说明类别:

    public class AccountDescriptionHistory : EntityModel<AccountDescriptionHistory>
    {
        #region Public Properties

        /// <summary>
        /// The account description of an account that is valid for a specific date range
        /// </summary>
        public virtual string AccountDescription { get; set; }

        /// <summary>
        /// The account this AccountDescriptionHistory is associated with.
        /// </summary>
        public virtual Account Account { get; set; }
}

解决方法

您不清楚确切输出的问题。话虽如此。

给予

List<Account> accounts = new List<Account>
{ 
    new Account {AccountNumber = "1",Description = "Account 1"},new Account {AccountNumber = "2",Description = "Account 2"},new Account {AccountNumber = "4",Description = "Account 4"},};

List<AccountDescriptionHistory> accountHistories = new List<AccountDescriptionHistory>
{ 
    new AccountDescriptionHistory {AccountDescription = "History Account 1",Account = accounts[0] },new AccountDescriptionHistory {AccountDescription = "History Account 2",Account = accounts[1] },new AccountDescriptionHistory {AccountDescription = "History Account 3",Account = new Account {AccountNumber = "3",Description = "Account 3"} },};

我们想要使用accountHistories查找accounts中存在的所有AccountNumber,我们可以编写一个Where子句来查找所有这些内容:>

List<AccountDescriptionHistory> result = accountHistories
    .Where(x => accounts.Any(y => y.AccountNumber == x.Account.AccountNumber))
    .ToList();

如果您只想从结果中检索AccountDescription,则可以编写:

List<string> result = accountHistories
    .Where(x => accounts.Any(y => y.AccountNumber == x.Account.AccountNumber))
    .Select(x => x.AccountDescription)
    .ToList();

如果您希望将结果转换为Account中的描述,而将其转换为AccountDescriptionHistory,则可以执行以下操作:

List<Account> result = accountHistories
    .Where(x => accounts.Any(y => y.AccountNumber == x.Account.AccountNumber))
    .Select(x => new Account {AccountNumber = x.Account.AccountNumber,Description = x.AccountDescription})
    .ToList();

修改

您可以创建如下函数:

static Account WithDescriptionHistory(Account account,IEnumerable<AccountDescriptionHistory> accountHistories)
{
    AccountDescriptionHistory accountHistory = accountHistories.FirstOrDefault(x => x.Account.AccountNumber == account.AccountNumber);
    account.Description = accountHistory?.AccountDescription ?? account.Description;
    return account;
}

比像这样转换原始的account变量:

accounts = accounts
    .Select(x => WithDescriptionHistory(x,accountHistories))
    .ToList();

输出

History Account 1
History Account 2
Account 4
,

因此,根据您的评论,您需要此代码

foreach (var a in account)
{
    if (!accountDescriptionHistory.Any(x => x.accountID == a.accountID)) continue;
    a.Description = accountDescriptionHistory.FirstOrDefault(x => x.accountID == a.accountID).AccountDescription;
}
,

假设您具有以下两个类别:

public class A
{
    public int Id { get; set; }
}

public class B
{
    public int Id { get; set; }
    public string desc { get; set; }
}

您可以使用LINQ Join语句创建与第一个列表中的ID匹配的描述的列表

    List<A> one = new List<A>
    { 
        new A {Id = 1},new A {Id = 2} 
    };
    List<B> two = new List<B>
    { 
        new B {Id = 1,desc = "test"},new B {Id = 2,desc = "test two"} 
    };
    
    var result = one.Join(
        two,x => x.Id,y => y.Id,(x,y) => new {Id = x.Id,Desc = y.desc}
    ).ToList();
,

亲爱的阿米特,我希望这会有所帮助

public partial class TesterForm : Form
{
    List<Account> account = new List<Account>();
    List<AccountDescriptionHistory> accountDescriptionHistory = new List<AccountDescriptionHistory>();
    List<AccountDescriptionHistory> resultlist = new List<AccountDescriptionHistory>();

    public TesterForm()
    {
        InitializeComponent();
    }

    public class Account
    {
        public int accountID { get; set; }
        public string accountdescription { get; set; }
    }

    public class AccountDescriptionHistory
    {
        public int accountID { get; set; }
        public string accountdescription { get; set; }
    }

    private void button1_Click(object sender,EventArgs e)
    {
        Account accountmodel = new Account();
        accountmodel.accountID = 1;
        accountmodel.accountdescription = "desc1";
        account.Add(accountmodel);
        Account accountmodel1 = new Account();
        accountmodel1.accountID = 2;
        accountmodel1.accountdescription = "desc2";
        account.Add(accountmodel1);
        Account accountmodel3 = new Account();
        accountmodel3.accountID = 3;
        accountmodel3.accountdescription = "desc3";
        account.Add(accountmodel3);

        AccountDescriptionHistory accountdescmodel = new AccountDescriptionHistory();
        accountdescmodel.accountID = 3;
        accountdescmodel.accountdescription = "desc4";
        accountDescriptionHistory.Add(accountdescmodel);
        AccountDescriptionHistory accountdescmodel2 = new AccountDescriptionHistory();
        accountdescmodel2.accountID = 4;
        accountdescmodel2.accountdescription = "desc5";
        accountDescriptionHistory.Add(accountdescmodel2);
        AccountDescriptionHistory accountdescmodel3 = new AccountDescriptionHistory();
        accountdescmodel3.accountID = 5;
        accountdescmodel3.accountdescription = "desc6";
        accountDescriptionHistory.Add(accountdescmodel3);


    }

    private void button2_Click(object sender,EventArgs e)
    {
        foreach (Account item in account)
        {
            foreach (AccountDescriptionHistory item2 in accountDescriptionHistory)
            {
                if (item.accountID==item2.accountID)
                {
                    AccountDescriptionHistory history = new AccountDescriptionHistory();
                    history.accountID = item.accountID;
                    history.accountdescription = item2.accountdescription;
                    resultlist.Add(history);
                }
            }
        }
        comboBox1.DataSource = resultlist;
        comboBox1.DisplayMember = "accountdescription";
    }
}

我正在使用Visual Studio 2019窗体,您将需要两个按钮和一个组合按钮以查看我测试过的结果。 添加到您的窗体combobox1,button1和button2。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-