【问题标题】:Linq to SQL select multiple columnsLinq to SQL 选择多列
【发布时间】:2013-10-01 00:25:21
【问题描述】:

我只想使用 LINQ 从 MSSQL DB 中选择 2 列。

SQL 应该是

select table.col1,table.col2 from table

我试过了

IList<string> myResults =
(
    from data in dbconn.table
    where table.col5 == null
    select new { 
        col1=data.Id.ToString(),
        col2=data.col2
    }
).Take(20).ToList();

但这不起作用。

它说

cannot convert type  list <AnonymousType#1> to Ilist<string>

【问题讨论】:

  • 当你说它不起作用时,你是什么意思?有例外吗?它没有返回任何内容,还是您期望的其他内容?
  • 注意:您的 LINQ 查询示例/尝试似乎与您的“SQL 应该是”语句不一致。也许你可以澄清你的目标以及实际问题

标签: c# linq linq-to-sql


【解决方案1】:

您基本上是在尝试用匿名类型列表的条目填充字符串列表,这是行不通的。

你有没有尝试过这样的事情?:

var list = from data in dbconn.table
           where table.col5 == null
           select new { 
            col1=data.Id.ToString(),
            col2=data.col2
           }

然后您可以轻松地在循环中使用条目,例如

foreach(var element in list) {
//...
}

或者像一个列表

list.Take(20).ToList();

【讨论】:

    【解决方案2】:

    首先,字符串列表 (List&lt;string&gt;) 在一个元素中只能有一个字符串,而不是两个(您在这里尝试做的事情)将类型更改为 var 可以解决您的异常,但不确定是否可以是您想要的解决方案。

    var myResults =
    (
        from data in dbconn.table
        where table.col5 == null
        select new { 
            col1=data.Id.ToString(),
            col2=data.col2
        }
    ).Take(20).ToList();
    

    【讨论】:

      【解决方案3】:

      您可以使用 linq Select 选择多个字段,如上图所示的各种示例,这将作为匿名类型返回。如果你想避免这种匿名类型,这是一个简单的技巧。

      var items = myResults.Select(f => new [] { f.Col1, f.Col2 }).SelectMany(item => item).Distinct();
      

      我认为这解决了问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 1970-01-01
        • 2010-10-03
        • 2011-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多