LINQ使用单个ID字段创建多个新实体

时间:2012-08-06 14:43:32

标签: linq

我有一个新手LINQ问题。我需要从字符串列表中创建两个相同类型的对象。我需要添加一个文本'Direct'& “间接”到字符串并将它们用作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查询?

感谢您的建议

2 个答案:

答案 0 :(得分:1)

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

var vProducts2 = (from s in vStrings
                  select s + "-Direct").Concat(
                  from s in vStrings
                  select s + "-InDirect");

答案 1 :(得分: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});

它只会迭代原始字符串集一次。