0

我有一个新手 LINQ 问题。我需要从字符串列表中创建两个相同类型的对象。我需要将文本“直接”和“间接”附加到字符串并将它们用作 ID 来创建两个唯一对象。

var vStrings = new List { "Milk", "Eggs", "Cheese" };

var vProducts = (from s in vStrings
                select new Product { ID = s + "-Direct" })
                .Union(
                 from s in vStrings
                select new Product { ID = s + "-InDirect" });

您可以在上面的示例中看到,我正在使用 Union 来创建两个不同的对象,有没有更好的方法来重写这个 LINQ 查询?

感谢您的建议

4

2 回答 2

1

这种方式并不短,但我认为它会更好一些,例如只有一个 Concat 而不是多个 Union:

var vProducts2 = (from s in vStrings
                  select s + "-Direct").Concat(
                  from s in vStrings
                  select s + "-InDirect");
于 2012-08-06T15:05:19.993 回答
1

如果您需要更多后缀,这可能是更好的方法:

var strings = new List<string> { "Milk", "Eggs", "Cheese" };
var suffixes = new List<string> {"-Direct", "-InDirect"};

var products = strings
    .SelectMany(_ => suffixes, (x, y) => new Product() {ID = x + y});

它只会遍历原始字符串集一次。

于 2012-08-06T15:16:38.190 回答