1

こんにちは、DB から 4 つの列を選択してから、リストを選択します。

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
4

4 に答える 4

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キーワードの後に​​クラス名を追加しました。

于 2013-10-22T22:54:43.317 に答える
0

言われたように、匿名型https://stackoverflow.com/a/19529805/1034373keyDataの代わりにインスタンスを返す必要があります。ただし、構造体には明示的なパラメーターなしのコンストラクターを含めることはできないため、keyData 型をクラスに変更するか、コンストラクターを追加する必要があります。

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();
于 2014-08-07T09:46:34.787 に答える
0

ここで同様の質問に答えました.SELECTとSELECTMANYを使用してこれを行うことができ ます https://stackoverflow.com/a/27755340/2764258

于 2015-01-03T13:45:00.417 に答える