C#Linq SQL选择多列到列表

Ben*_* Ae 1 c# sql linq list

嗨我想从DB中选择4列然后选择列表

public struct keyData
{

    public int pid;
    public int sid;
    public string proid;
    public string title;
}
Run Code Online (Sandbox Code Playgroud)
Entities dbconn = new Entities();
List<keyData> temRes = (
    from viewData in dbconn.vw1
    join hData in dbconn.tableH
    on new { pid= (int)viewData.pid, proid= viewData.proid}
    equals new { pid= (int)hData .pid, proid= hData .proid}
    into joinSet
    from joinUnit in joinSet.DefaultIfEmpty()
    where joinUnit == null
    select new { pid= (int)viewData.pid, sid= (int)viewData.sid, proid= viewData.proid, Title=viewData.Title }
    ).ToList();
Run Code Online (Sandbox Code Playgroud)

然后它说:

错误3无法隐式转换

type 'System.Collections.Generic.List<AnonymousType#1>' 
Run Code Online (Sandbox Code Playgroud)

'System.Collections.Generic.List<hl.Program.keyData>'

谢谢

使用MarcinJuraszek的想法

它给了我:

Only parameterless constructors and initializers are supported in LINQ to Entities
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 5

那是因为你的quere返回一个匿名类型的对象.将其更改为返回keyData实例:

    List<keyData> temRes = (
        from viewData in dbconn.vw1
        join hData in dbconn.tableH
        on new { pid= (int)viewData.pid, proid= viewData.proid}
        equals new { pid= (int)hData .pid, proid= hData .proid}
        into joinSet
        from joinUnit in joinSet.DefaultIfEmpty()
        where joinUnit == null
        select new keyData() { pid= (int)viewData.pid, sid= (int)viewData.sid, proid= viewData.proid, Title=viewData.Title }
        ).ToList();
Run Code Online (Sandbox Code Playgroud)

不同之处在于select条款.我在new关键字后添加了您的类名.