我有一个对象
public class test
{
public object obj1;
public List<string> items;
}
我有一个List<test>
。我想为每个item
创建一个具有obj1
和item
属性的新对象。 items
列表可以为null
或为空。 Linq 有什么办法吗?
答案 0 :(得分:0)
List<test> tests = new List<test>();
var ob1=new test{ obj1 = "obj1" };
var ob2=new test{ obj1 = "obj2" };
var ob3=new test{ obj1 = "obj3" };
var ob4=new test{ obj1 = null };
tests.Add(ob1);
tests.Add(ob2);
tests.Add(ob3);
tests.Add(ob4);
var result = tests.Select(e => new NewType
{
name = e.obj1 != null ? e.obj1.ToString() : null
});
foreach (var item in result)
{
Console.WriteLine(item.name);
}
这是您要寻找的吗?
答案 1 :(得分:0)
说Test.Obj1有两个要包含在每个新项目中的属性,即“名称”和“ ID”,以及列表中的一个项目-尝试这样的查询。
将使用(例如)每个Test.Obj1.List的第一个元素生成一个新的(匿名)对象的列表
IEnumerable<dynamic> results = tests
.Select(o => new { Name = o.obj1.Name,
ID = o.obj1.Id,
Item = o.items.First() ?? null} )
.ToList();
Console.WriteLine(results.ElementAt(0));
Console.WriteLine(results.ElementAt(1));
Console.WriteLine(results.ElementAt(2));
// { Name = Foo, ID = 1, Item = a }
// { Name = Bar, ID = 2, Item = d }
// { Name = Goo, ID = 3, Item = g }
// Example types below...
public class Obj1
{
public string Name {get; set;}
public int Id {get; set;}
public Obj1(string name, int id)
{
Name = name;
Id = id;
}
}
// Create some instances
Obj1 objA = new MyObject("Foo", 1);
Obj1 objB = new MyObject("Bar", 2);
Obj1 objC = new MyObject("Goo", 3);
// Your test class that contains the custom object, and a list
public class Test
{
public Obj1 obj1;
public List<string> items;
public Test(Obj1 myobject, List<string> myItems)
{
obj1 = myobject;
items = myItems;
}
}
// Make a list of test objects
List<Test> tests = new List<Test>{
new Test(objA, new List<string>{"a", "b", "c"}),
new Test(objB, new List<string>{"d", "e", "f"}),
new Test(objC, new List<string>{"g", "h", "i"})};
对于new {},您可以根据需要替换为命名类型T和构造函数,并将结果列表更新为
IEnumerable<T>
此外,您可能对要(或全部)列表中的哪个项目有特定的条件,因此可以在构造函数中添加一个更有趣的查询,而不是.First()
或者只获取整个测试项,将构造函数调整为
new { Obj = o.obj1, Items = o.items}
希望这会有所帮助-此集合中有一些很棒的链接:https://docs.microsoft.com/en-us/dotnet/csharp/linq/perform-a-subquery-on-a-grouping-operation