2

我有这门课:

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 的列表

任何的想法 ?

谢谢,

4

2 回答 2

4
var result = (from my in list
             where my.Id == 5
             select new List<int>() { my.MyId1, my.MyId2, my.MyId3 }).First();
于 2012-11-27T13:04:19.410 回答
1

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

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

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

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

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

var result = list.First(my => my.Id == 5).ToListOfInt();
于 2012-11-27T15:17:43.057 回答