【问题标题】:How to create a list from two values?如何从两个值创建一个列表?
【发布时间】:2011-09-21 05:00:26
【问题描述】:

不知道如何为这个问题写一个好的标题... :)

我是 Linq 新手,不知道我遇到的这个问题应该使用什么语法

class MainClass()
{
  string MainKey {get;set;}
  string MainName {get;set;}
  List<SmallObject> MainList {get;set}
}

class SmallObject()
{
  string SmallKey {get;set}
}

林克:

myTable 包含 4 个字符串字段(Field1、Field2、Field3、Field4)

var mainQuery = (from v from myTable
                 select v)    

var myQuery = (from v in mainQuery
               select new MainClass()
               {
                MainKey = v.Field1,
                MainName = v.Field2,
                MainList = #whats the correct syntax here?#
               })

标有#whats the correct syntax here?#的部分是我的问题。 我想将 v.Field3 和 v.Field4 作为项目添加到 MainClass 中的 MainList-object,但我不知道该怎么做。

如果有人能提供帮助,我很高兴。

【问题讨论】:

    标签: c# linq list


    【解决方案1】:

    您可以创建一个List&lt;T&gt;(或任何其他集合)并使用collection initializer向其中添加项目:

    MainList = new List<SmallObject> { v.Field3, v.Field4 }
    

    更新:

    由于Field3Field4 是字符串,您只需执行您已经执行的操作即可将它们变成SmallObjects:

    MainList = new List<SmallObject>
    { 
        new SmallObject { SmallKey = v.Field3 },
        new SmallObject { SmallKey = v.Field4 },
    }
    

    或者,您可以添加一个接受字符串参数的SmallObject 构造函数,并像new SmallObject(v.Field3) 一样使用它。

    【讨论】:

    • 有点不清楚,他可能也在尝试做类似MainList = new { Field3PropLabel = v.Field3, Field4PropLabel = v.Field4 }的事情
    • 这行得通吗? v.Field3 是字符串类型,而不是 SmallObject 类型
    • 如果您想使用 List 来存储它们,则类型必须匹配。不过,如果您参加的是匿名课程,它会工作得很好。
    • @user703494:您应该首先提供此信息,因为它很重要,但变化不大:您需要自己提供从stringSmallObject 的转换(显然)。
    • 我想也许我可以写 MainList = new List { new SmallObject { SmallKey = v.Field3 }, new SmallObject { SmallKey = v.Field4 } } 但这似乎不起作用. MainList 未填充
    【解决方案2】:

    不确定我是否理解正确。但以下对我有用:

    var myTable = new [] {
                new {Field1 = "a", Field2 = "b", Field3 = "c", Field4 = "d"},
                new {Field1 = "a", Field2 = "b", Field3 = "c", Field4 = "d"}
            };
    
    
    
            var myQuery = (from v in myTable
                           select new MainClass()
                           {
                            MainKey = v.Field1,
                            MainName = v.Field2,
                            MainList = new List<SmallObject>{
                                new SmallObject {SmallKey = v.Field3},
                                new SmallObject {SmallKey = v.Field4},
                            }
                           });
    

    myQuery 填充了 2 个对象 (MainClass),两个对象都有一个 Mainlist,每个包含 2 个项目 (SmallObject)。

    顺便说一句,真的不明白下面这行是做什么用的:

    var mainQuery = (from v from myTable
                 select v) 
    

    但正如我所说,也许我没有正确理解你

    GL!

    【讨论】:

      猜你喜欢
      • 2014-06-29
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2022-08-03
      相关资源
      最近更新 更多