使用LINQ查询语法可以进行基于工厂的对象构造和属性分配吗?

时间:2014-06-02 14:29:46

标签: c# linq

我有一个类似于以下内容的LINQ查询(为了简洁起见,删除了过滤器等)

var orderLines = 
    from line in lines
    select new OrderLine {
        Prop1 = line[0],
        Prop2 = line[1],
        // ... possibly 1-3 more properties are initialized
    };

非常简单,有用的对象初始化器语法使一切都清晰。不幸的是我需要更改OrderLine类的构造(包括对它所属的顺序的引用),所以我将默认构造函数设为private并公开了工厂方法。我无法弄清楚如何使用LINQ查询语法调整我的查询,所以我切换到方法语法:

var orderLines = 
    lines.Select(line => {
        var orderLine = Order.CreateOrderLine();
        orderLine.Prop1 = line[0];
        orderLine.Prop2 = line[1];
        return orderLine;
    });

在这种情况下是否可以使用查询语法?如果是这样,那怎么样?提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以将Order.CreateOrderLine方法的签名更改为以下内容:

//change object for type of Props
public static Order CreateOrderLine(object prop1, object prop2)
{
     //make assignments here
}

答案 1 :(得分:-1)

以下内容如何:

var orderLines = from line in lines
let orderLine = Order.CreateOrderLine()
select new {
    Prop1 = line[0],
    Prop2 = line[1],
};