Linq选择某些属性到另一个对象?

时间:2009-05-28 21:12:52

标签: c# .net vb.net linq .net-3.5

所以说我有一系列Bloops

Class Bloop
  Public FirstName
  Public LastName
  Public Address
  Public Number
  Public OtherStuff
End Class

然后我有一类Razzies

Class Razzie
  Public FirstName
  Public LastName
End Class

是否可以使用Linq从Bloops集合中的所有Bloops中选择FirstName和LastName并返回一组Razzies?或者我是否仅限于For-Loop来完成我的工作?

要清除任何混淆,VB或C#都可以。这也可能导致我提出问题(如何使用“Where”条款)。

5 个答案:

答案 0 :(得分:43)

List<Bloop> myBloops = new List<Bloops>;
//populate myRazzies
List<Razzie> myRazzies = myBloops.Select(x => new Razzie() { FirstName = x.FirstName, LastName = x.LastName}).ToList();

答案 1 :(得分:29)

这应该做的工作:

Dim results = From item In bloops _
              Select New Razzie() With _
              { _
                  .FirstName = item.FirstName, _
                  .LastName = item.LastName _
              }

如果要将结果从IEnumerable<Bloop>(LINQ查询返回的内容)转换为数组或List<Bloop>,只需将调用附加到ToArray()ToList()分别是扩展方法。

编辑:更正了代码,使其现在具有有效的VB.NET 9语法。

答案 2 :(得分:2)

public void Linq9()
{
    string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };

    var upperLowerWords =
        from w in words
        select new { Upper = w.ToUpper(), Lower = w.ToLower() };

    foreach (var ul in upperLowerWords)
    {
        Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower);
    }
}

答案 3 :(得分:0)

使用Enumerable.Select

可以实现从一种类型转换为另一种类型

事实上,101个linq样本中有一个sample,它显示了一个将ints转换为字符串的查询。

答案 4 :(得分:0)

        C# Sample - Thanks to earlier posters.

        List<clsObj> myList = new List<clsObj>();
        clsObj clsObjInstance = null;
        for (int i = 0; i < 10; i++)
        {
            clsObjInstance = new clsObj() { x = (i+1) % 3, a = "A" + i.ToString() };
            myList.Add(clsObjInstance);
        }

        List<int> extIntList = myList.Select(u => u.x).ToList();
        foreach (int u in extIntList)
            Console.Write(u.ToString() + "\t");

        List<string> extStringList = myList.Select(u => u.a).ToList();
        foreach (string u in extStringList)
            Console.Write(u + "\t");