我有一个新手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查询?
感谢您的建议
答案 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});
它只会迭代原始字符串集一次。