2013-10-22 42 views
1

您好我想选择4列表格数据库,然后选择一个列表C#的LINQ SQL选择多列列出

public struct keyData 
{ 

    public int pid; 
    public int sid; 
    public string proid; 
    public string title; 
} 
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(); 

然后它说:

错误3无法隐式转换

type 'System.Collections.Generic.List<AnonymousType#1>' 

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

使用MarcinJuraszek的想法

感谢

它给了我:

Only parameterless constructors and initializers are supported in LINQ to Entities 

回答

5

那是因为你的队列中去返回匿名类型的对象。将其更改为返回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(); 

的区别在于select条款。我在new关键字后添加了您的课程名称。

+0

然后它给了我:LINQ to Entities只支持无参数的构造函数和初始值设定项。 –

+0

你是否为'keyData'类定义了无参数构造函数? – MarcinJuraszek

+0

不确定,那该怎么办? –

0
Entities dbconn = new Entities(); 
List<keyData> temRes = (
    from viewData in dbconn.vw1.ToList() 
    join hData in dbconn.tableH.ToList() 
    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(); 
0

正如有人说你必须返回keyData实例,而anonimous型https://stackoverflow.com/a/19529805/1034373的。但是,结构不能有明确的参数构造函数,所以你必须要么改变KEYDATA类型的类或添加counstructor

public struct keyData 
{ 
    public keyData(int pid, int sid, string proid, string title) 
    { 
     this.pid = pid; 
     this.sid = sid; 
     this.proid = proid; 
     this.title = title; 
    } 
    public int pid; 
    public int sid; 
    public string proid; 
    public string title; 
} 

,写这样的代码

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().Select(x => new keyData(x.pid, x.sid, x.proid, x.title)).ToList(); 
0

我已经回答了类似的问题here.You可以简单地使用SELECT和SELECTMANY做到这一点 https://stackoverflow.com/a/27755340/2764258

+0

这是一条评论,而不是答案。正常的程序将被投下一票(重复),但我认为你还没有足够的积分。顺便说一句,你对另一个问题的回答在这里不适用。 –