【问题标题】:Returning a Dictionary<string, string> from a linq query从 linq 查询返回 Dictionary<string, string>
【发布时间】:2016-11-19 21:59:37
【问题描述】:

我有一个表,其中有 2 列定义为 varchar(50):Column1 和 Column2。我想返回一个&lt;string, string&gt; 的字典,其中每一行都在字典中,其中 Column1 是键,Column2 是值。这就是我所拥有的:

public Dictionary<string, string> LoadAllTheDataFromDB()
{
   using (MyDC TheDC = new MyDC())
   {
       return (from c in TheTable
               select new Dictionary<string, string>()
               {
                     //stuck here

               }).FirstOrDefault();

   }
}

如何使字典被填满?

【问题讨论】:

  • 首先选择这两列(new {c.Column1, c.Column2}),然后物化(ToArray),然后调用ToDictionary。

标签: c# asp.net linq-to-sql


【解决方案1】:

试试这个:

var dict = TheTable.Select( t => new { t.Col1, t.Col2} )
               .ToDictionary( t => t.Col1, t => t);

请记住,在 select lambda 中,您将执行投影并创建一些匿名对象。然后在ToDictionary 中你将传递两个参数:第一个参数是一个 lambda 来指定键;在上面的代码中,我们选择Col1 作为关键。第二个参数是一个指定值的 lambda;在上面的代码中,我们选择对象本身作为值。

如果您希望值是匿名类型,请像这样更改第二个 lambda:

ToDictionary( t => t.Col1, t => new { t.Col2 });

如果您希望值是您定义的类型,请像这样更改第二个 lambda:

ToDictionary( t => t.Col1, t => new YourType { Prop1 = t.Col2 });

【讨论】:

  • 请不要忘记标记您认为正确的答案。
【解决方案2】:

既然你只需要第一行的值,为什么不先这样做:

 var row = TheTable.FirstOrDefault();

如果你得到结果,不仅仅是构造那个字典:

 return row == null ? null : 
       new Dictionary<string,string>{ {row.Column1, row.Column2 } }; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多