2

私はLINQtoSQLを初めて使用しますが、最近まで問題はありませんでした。C#での書き込み。

モデルヘルパーの.csファイルがあります。ビューのベースとなるパブリックリストを作成しようとしています。

モデルヘルパーのコードは次のとおりです(無関係で機能するコンテンツが削除されています:

using System;
using System.Collections.Generic;
using System.Linq;

namespace sample_runs.Models {
    partial public class SampleRunsDataContext {
        public List<attendee> GetMyRuns(int me) {          
            var mine = (from a in attendees
                       join s in sample_runs 
                            on a.sample_run_id equals s.sample_run_id
                       where a.user_id == me
                       orderby a.sample_run_id descending
                       select new {
                           s.sample_run_id,
                           a.role.role_name,
                           s.sample_run_status.sample_run_status_name,
                           s.project_number,
                           s.run_type.run_type_name,
                           s.description
                       }).ToList();
            return mine;
        }

    }

}

データベースに関しては、このように関係する2つのテーブルを検討してください。sample_runsは、パーティーやイベントのリストのようなものです。したがって、各行について、パーティーのすべての情報があります。次に、出席者と呼ばれるテーブルがあり、すべてのパーティー出席者が個別にリストされています。各行には、メタファーが崩壊すると思われる「役割」など、出席者に関する情報が含まれています。各パーティーには任意の数の参加者がいる可能性があります。データベースは、外部キーと通常のさまざまな正規化できれいです。

私が欲しいのは、与えられた出席者のために、彼らが行ったことのあるすべてのパーティーのリストです。それが理にかなっていることを願っています。

このファイル内の他のすべてのlinqステートメントとリストは正常に機能しています。これは私にこのブランドの悲しみを与えます:

Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>'
to 'System.C9ollections.Generic.List<sample_runs.Models.attendee>

これが公開リストなのか他のものなのか混乱しています。

かどうかわからない

List<attendee>

本当にする必要があります

List<attendee>

参加のため。

いくつかの調査の後、「mine」変数が送信される対象と、これがList<>またはIENumerable<>などであるかどうかを試してみました。私はひどく迷子になっています。

参考までに、これはコントローラーの「GetMyRuns」で実行したいことです。

    public ActionResult myruns() {
        return View(db.GetMyRuns(someintvar));
    }

そして、強い型のビューを作成してそこから進むと思います。

私はこれがソフトボールの質問かもしれないことを知っています、しかし私はあなたが私に提供することができるかもしれないどんな助けにも信じられないほど感謝しています。

ありがとうございました。

4

2 に答える 2

3

エラーが示すように、mineは匿名オブジェクトのリストですが、オブジェクトのリストを返す必要がありattendeeます。クエリ内で匿名オブジェクトが作成されます(selectタイプの表示がないことに注意してください)。

select new /* NO TYPE */ {
    s.sample_run_id,
    ...
}

問題の解決策は、アプリケーションがどの程度正確に構造化されているかによって異なりますが、問題を修正する1つの方法は、ある種のDTO(データ転送オブジェクト)リストを作成し、代わりにそれを返すことです。

public List<AttendeeDto> GetMyRuns(int me)
{
    var mine = (from a in attendees
                join s in sample_runs 
                on a.sample_run_id equals s.sample_run_id
                where a.user_id == me
                orderby a.sample_run_id descending
                select new AttendeeDto
                {
                    SampleRunId = s.sample_run_id,
                    RoleName = a.role.role_name,
                    SampleRunStatusName = s.sample_run_status.sample_run_status_name,
                    ProjectNumber = s.project_number,
                    RunTypeName = s.run_type.run_type_name,
                    Description = s.description
                }).ToList();

        return mine;
    }
}

クラスAttendeeDtoは次のようになります。

class AttendeeDto
{
    public int SampleRunId { get; set; }
    public string RoleName { get; set; }
    public string SampleRunStatusName { get; set; }
    public int ProjectNumber { get; set; }
    public string RunTypeName { get; set; }
    public string Description { get; set; }
}

そしてところで-本番コードで整数変数meとリスト変数に実際に名前を付けないことを願っていますか?mine;)

于 2013-01-24T16:45:11.003 に答える
2

問題のある線はここにあると思います。

select new {
    s.sample_run_id,
    a.role.role_name,
    s.sample_run_status.sample_run_status_name,
    s.project_number,
    s.run_type.run_type_name,
    s.description
 }

新しい匿名タイプを選択しています。代わりに、attendeeタイプの新しいオブジェクトを作成してから、プロパティをマッピングするべきではありませんか?

select new Attendee {
    SampleRunId = s.sample_run_id,
    Description = s.description
 }

これには、出席者クラスが必要であることに注意してください。

public class Attendee 
{
    public int SampleRunId { get; set; }
    public string Description { get; set; }
}

うまくいけば、これはそれを少し明確にします

于 2013-01-24T16:48:05.990 に答える