使用LINQ从List返回一个元素

时间:2014-03-13 09:40:59

标签: linq

我有一个包含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:无法转换为&#39; int&#39;到&#39; Project1.Company

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

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

这会给我所有包含&#34; X&#34;的公司名称。是不是可以在ListConpanies中获取所有公司名称?

希望我不要不清楚。

谢谢!

4 个答案:

答案 0 :(得分:1)

要获得所有工资,请尝试以下方法:

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

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

答案 1 :(得分:1)

您可以将所有工资都列入一个单独的列表,其中包含Select

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

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

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

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

答案 2 :(得分:1)

如果您想获得所有工资,只需使用Select

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

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

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

会为您提供包含&#34; X&#34;的所有公司名称。它将返回IEnumerable<Company>个名称包含&#34; X&#34;的公司。它可能不是单身而是多家公司。然后,您可以通过合并WhereSelect子句来选择他们的工资:

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

答案 3 :(得分:1)

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

您可以使用Select extenion Method从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();