2012-08-06 61 views
0

我有一个新手LINQ问题。我需要从一个字符串列表中创建两个相同类型的对象。我需要一个文本“直接” &“间接”附加到字符串,并把它们作为ID创建两个独特的对象。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" }); 

你可以看到的例子上面,我使用的是联合打造两个不同的对象,有没有更好的方式来改写这个LINQ查询?

感谢您的建议

+0

我不会这样做。现在你在你的字符串列表上迭代两次。当列表很短时,也许不是一个问题,但无论如何,我会在一个简单的'foreach'循环中做到这一点。 – 2012-08-06 15:16:50

回答

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}); 

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

1

这种方式是不是更短,但我认为这将是一个很少有这种更好,因为只有一个的毗连代替许多联盟:

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

感谢您的建议。 – user320587 2012-08-06 15:14:11

相关问题