简单的Linq问题:如何选择多个列?

时间:2009-10-09 08:42:38

标签: sql linq select

我的代码是:

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

我需要这段代码,但我只想在“Benutzer”-Table中选择20列中的3列。 这是什么语法?

3 个答案:

答案 0 :(得分:22)

这是一个查询表达式:

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对象不会与上下文关联。

答案 1 :(得分:4)

    List<Benutzer> users = (from a in dc.Benutzer
                            select new Benutzer{
                             myCol= a.myCol,
                             myCol2 = a.myCol2
                             }).ToList();

如果你想制作同样的清单,我认为这就是你想要的。但是,假设您设置的属性具有公共设置器。

答案 2 :(得分:1)

尝试:

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

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