Linq方法有些不对劲

时间:2017-05-10 10:28:47

标签: c# sql entity-framework list linq

我有以下方法:

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;
}

我的错误: enter image description here

请告诉我有什么问题?

3 个答案:

答案 0 :(得分:3)

这是因为您强制匿名类型为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();

答案 1 :(得分:1)

如果您创建新的匿名类型

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

然后将其存储到var q7而不是List<test_view> q7

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

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

答案 2 :(得分:1)

您没有创建任何test_view。您需要在Select电话中执行此操作。

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