【问题标题】:Something wrong into Linq methodLinq 方法有问题
【发布时间】:2017-10-08 22:45:24
【问题描述】:

我有以下方法:

public List<test_view> SelectTypeAnonimowe(string filtr)
{
    testViewClassDataContext tv = new testViewClassDataContext();

    List<test_view> q7 = tv.test_views
        .Where(w => w.FirstName.StartsWith("H") && w.Type == filtr)
        .Select(p => new {p.AutoName, p.LastName })
        .ToList();

     return q7;
}

我的错误:

请告诉我有什么问题?

【问题讨论】:

  • 您在 Select 中返回匿名类型,而不是 test_view 的实例。

标签: c# sql entity-framework list linq


【解决方案1】:

如果你创建了一个新的匿名类型

.Select(p => new {p.AutoName, p.LastName })

然后将其存储到var q7 而不是List&lt;test_view&gt; q7

在您的Select() 中创建test_view 的新对象:

.Select(p => new test_view() {AutoName = p.AutoName, LastName = p.LastName })

【讨论】:

  • 你不能从一个方法中返回一个匿名对象,所以你的第一个选项不会起作用,因为他们正试图返回它。
  • public object SelectTypeAnonimowe(string filtr)
  • 如果这是您的意图,那么您应该在答案中声明它。按原样,您的第一个选项不起作用。
【解决方案2】:

您没有创建任何test_views。您需要在您的 Select 通话中执行此操作。

.Select(p => new test_view(p.AutoName p.LastName))

【讨论】:

    【解决方案3】:

    这是因为您将 Anonymous 类型强制添加到 test_view 类型中。你应该创建test_view 结果:

    List<test_view> q7 = tv.test_views
        .Where(w => w.FirstName.StartsWith("H") && w.Type == filtr)
        .Select(p => new test_view(p.AutoName, p.LastName))
        .ToList();
    

    话虽如此,您的test_view 应该有一个将两个变量作为输入的构造函数。像这样的:

    public string AutoName {get; private set;}
    public string LastName {get; private set;}
    public test_view(string autoName, string lastName){
        AutoName = autoName;
        LastName = lastName;
    }
    

    请注意,上述选项不适用于LINQ 到实体,因为LINQ 到实体需要无参数构造函数。或者因此,只要您的 test_view 具有两个属性:

    public string AutoName {get; set;} //public property here
    public string LastName {get; set;} //public property here
    public test_view(){ //parameterless constructor here
    }
    

    您也可以像这样初始化属性(连同test_view 创建):

    List<test_view> q7 = tv.test_views
        .Where(w => w.FirstName.StartsWith("H") && w.Type == filtr)
        .Select(p => new test_view() {AutoName = p.AutoName, LastName = p.LastName})
        .ToList();
    

    【讨论】:

    • 值得一提的是,您可以在新建类时使用替代语法,而不是要求构造函数参数,这不是所需的/选项。
    • @4est no prob...如果你想让结果出现在匿名类中,你也可以尝试使用var(而不是List&lt;test_view&gt;)。
    • @Ian 带参数的构造函数在LINQ to Entities中不起作用,你最好去掉那个“选项”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2011-01-28
    • 2015-08-28
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多