查询Linq从对象</int>返回List <int>

时间:2012-11-27 13:02:29

标签: c# .net linq

我有这堂课:

public class MyClass
{
    public int Id { get; set; }
    public int MyId1 { get; set; }
    public int MyId2 { get; set; }
    public int MyId3 { get; set; }
    public string MyName { get; set; }
}

我有List<MyClass>

我查询:

var result = (from my in MyClass
             where Id == 5
             select my).First();

我想在结果中找到一个包含MyId1,MyId2和MyId3的列表

有什么想法吗?

谢谢,

2 个答案:

答案 0 :(得分:4)

var result = (from my in list
             where my.Id == 5
             select new List<int>() { my.MyId1, my.MyId2, my.MyId3 }).First();

答案 1 :(得分:1)

我认为您的代码中有两个步骤:(1)获取所需对象和(2)将该对象转换为列表。所以实际上我觉得更合适的是这样的:

var firstResult = list.First(my => my.Id == 5);
var result = new List<int>{firstResult.MyId1, my.MyId2, my.MyId3};

这种方法稍微好一点,因为它更简单,并表明你的意图更清晰。

考虑Single Responsibility Principle:您的代码应该只有一个原因需要更改。你的代码(以及Arsen的代码)缺乏这种能力。当需求发生变化并且您需要更改类或向列表中添加其他属性时,您需要更改过滤逻辑。但很明显,这两个方面是正交的,在这种情况下不应该改变。

顺便说一句,你可以在你的MyClass类中添加扩展方法或简单方法,将其转换为List。在这种情况下,您的代码将更具可读性:

var result = list.First(my => my.Id == 5).ToListOfInt();