【问题标题】:Simple Linq question: How to select more than one column?简单的 Linq 问题:如何选择多个列?
【发布时间】:2009-10-09 08:42:37
【问题描述】:

我的代码是:

            List<Benutzer> users = (from a in dc.Benutzer
                                    select a).ToList();

我需要此代码,但我只想选择“Benutzer”表中 20 列中的 3 列。 它的语法是什么?

【问题讨论】:

  • 您输入了Benutzer?是否考虑过使用本地化 C#? Liste&lt;Benutzer&gt; benutzer = (aus a in dc.Benutzer wähle a).ZuListe(); ;)

标签: sql linq select


【解决方案1】:

这是一个查询表达式:

var users = (from a in dc.Benutzer
             select new { a.Name, a.Age, a.Occupation }).ToList();

或者用点表示法:

var users = dc.Benutzer.Select(a => new { a.Name, a.Age, a.Occupation })
                       .ToList();

请注意,这将返回anonymous type 的列表,而不是Benutzer 的实例。就个人而言,我更喜欢这种方法而不是创建部分填充的实例列表,因为任何处理部分实例的人都需要检查它们是否来自以找出真正存在的内容。

编辑:如果您真的想构建 Benutzer 的实例,而 LINQ 不允许您在查询中这样做(我不确定为什么),您总是可以这样做:

List<Benutzer> users = dc.Benutzer
    .Select(a => new { a.Name, a.Age, a.Occupation })
    .AsEnumerable() // Forces the rest of the query to execute locally
    .Select(x => new Benutzer { Name = x.Name, Age = x.Age, 
                                Occupation = x.Occupation })
    .ToList();

即将匿名类型用作 DTO。请注意,返回的 Benutzer 对象不会与上下文相关联。

【讨论】:

  • “典型”是什么意思?
  • 我希望类型是 Benutzer,而不是匿名。
  • 如果您为 Benutzer 提供无参数构造函数和所需属性的公共设置器,则可以。或者和符合相同目的的构造函数。
【解决方案2】:
    List<Benutzer> users = (from a in dc.Benutzer
                            select new Benutzer{
                             myCol= a.myCol,
                             myCol2 = a.myCol2
                             }).ToList();

如果您想制作相同类型的列表,我认为这就是您想要的。但这假设您正在设置的属性具有公共设置器。

【讨论】:

  • 你需要一个逗号来分隔字段,虽然我怀疑这就是为什么它打破了
  • 我刚刚在我的机器上用一个非常相似的用例尝试过它并且它有效。你能粘贴确切的错误吗?
  • 不允许在查询中显式构造实体类型“DAL.Benutzer”。那是错误
  • 尝试从查询中删除Benutzer 然后:select new { myCol = a.myCol, ... } 构造一个匿名类型。
  • 我猜这是因为您没有允许这样做的构造函数。为您的 Benutzer 类创建一个构造函数,并以正常方式进行。选择新的 Benutzer(myCol、myCol2 等)
【解决方案3】:

尝试:

var list = (from a in dc.Benutzer select new {a.Col1, a.Col2, a.Col3}).ToList();

但现在你有了匿名对象列表,而不是 Benutzer 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多