【问题标题】:Return one Element from List using LINQ使用 LINQ 从列表中返回一个元素
【发布时间】:2014-03-13 09:40:59
【问题描述】:

我有一个包含 3 个变量的列表,即费用、薪水和年份。我想使用 LINQ 从列表中返回所有费用。编写一个 foreach 循环就足够了,但我希望使用 LINQ 归档一些更有效的东西。

我在想这样的事情:

List<Company> ListCompanies = new List<Company>();

Company company1 = new Company() { Expense = 200, Salary = 1000, Year = new DateTime(2014, 1, 1).ToString("yyyy/mm/dd") };
Company company2 = new Company() { Expense = 300, Salary = 800, Year = new DateTime(2014, 2, 1).ToString("yyyy/mm/dd") };
Company company3 = new Company() { Expense = 500, Salary = 1400, Year = new DateTime(2014, 3, 1).ToString("yyyy/mm/dd") };

ListCompanies.Add(company1);
ListCompanies.Add(company2);
ListCompanies.Add(company3);

var Exp = ListCompanies.Where(e => ListCompanies.Contains(e.Expense));

这不起作用,因为我收到此错误:

参数 1:无法从 'int' 转换为 'Project1.Company

我知道我可以像这样从 LINQ 查询中获取直接值:

var CompanyName = ListCompanies.Where(cn => cn.Name.Contains("X"));

这会给我所有包含“X”的公司名称。 ListConpanies中的所有公司名称是不是都可以获取?

希望我没有说不清楚。

谢谢!

【问题讨论】:

  • 你在问什么...? “我想使用 LINQ 从列表中返回所有薪水。”,然后您问“难道不能在 ListConpanies 中获取所有公司名称吗?”

标签: linq


【解决方案1】:

您可以使用Select 将所有薪水放入单独的列表中:

var allSalaries = ListCompanies.Select(c => c.Salary).ToList();

这会产生一个{1000, 800, 1400}的列表

如果您不想要列表,但希望遍历列表中的特定属性,您可以在 foreach 循环中执行 Select

foreach (var expense in ListCompanies.Select(c => c.Expense)) {
    ...
}

【讨论】:

  • 很好!,不知道我可以使用这样的 LINQ 查询作为 foreach 中的参数。很棒的小费。谢谢!
【解决方案2】:

要获得所有工资,试试这个:

var salaries = ListCompanies.Select(c => c.Salary);

这会给你一个IEnumerable。如果需要,您可以使用ToArray()ToList()等进行转换。

【讨论】:

  • 简单直接。谢谢
【解决方案3】:

如果你想得到所有的工资,只需使用Select

var salaries = ListCompanies.Select(e => e.Salary );

另外,你这样说是不对的:

var CompanyName = ListCompanies.Where(cn => cn.Name.Contains("X"));

将为您提供所有包含“X”的公司名称。它将返回名称包含“X”的公司的IEnumerable&lt;Company&gt;。它可能不是单一的,而是多个公司。然后您可以通过组合WhereSelect 子句来选择他们的薪水:

var filteredSalaries = ListCompanies.Where(c => c.Name.Contains("X"))
                                    .Select(c => c.Salary);

【讨论】:

    【解决方案4】:

    您收到错误是因为您在(公司类型)公司的集合中搜索 int Expense,因此类型差异会导致错误。

    您可以使用选择扩展方法从 IEnumerable 中选择任何属性,它将返回 IEnumerable。

     var Expenses = ListCompanies.Select(c => c.Expenses);
     var Salaries = ListCompanies.Select(c => c.Salary);
     var Years = ListCompanies.Select(c => c.Year);
    

    这些费用、薪水和年限都属于 IEnurable 类型。如果你想从中列出,那么你必须调用 ToList() 扩展方法。

     var Expenses = ListCompanies.Select(c => c.Expenses).ToList();
     var Salaries = ListCompanies.Select(c => c.Salary).ToList();
     var Years = ListCompanies.Select(c => c.Year).ToList();
    

    【讨论】:

    • 我明白了。好吧,这些信息非常基础。谢谢解释!
    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    相关资源
    最近更新 更多