私はEntity FrameworkでデータベースにアクセスするWeb APIプロジェクトでLINQを使用しています。スカッフォールディングを使用してAPIコントローラを作成しましたLinq式でのメソッドの使用
代わりにDTOを使用するようにWeb APIでEFモデルクラスが公開されないようにします。私は、DTOを使用するコントローラメソッドを変更し、特定のエンティティのモデルクラスとDTOの間で値をコピーする "Translate"メソッドを用意しました。クラス内のいくつかのメソッドでそれを使用します。
私は、FirstName、LastName、MiddleNameという3つのプロパティを持つ単純なPersonクラスを使用しています。
public IQueryable<PersonDto> GetPersons()
{
var personDtos = from p in db.Persons
order by p.LastName, p.FirstName
select new PersonDto()
{
FirstName = p.FirstName,
LastName = p.LastName,
MiddleName = p.MiddleName
};
return personDtos;
}
private PersonDto Translate(Person p)
{
if (person == null)
return null;
return new PersonDto()
{
FirstName = p.FirstName,
LastName = p.LastName,
MiddleName = p.MiddleName
}
}
あなたは以下のように、LINQの式に翻訳メソッドを呼び出すことにより、リファクタリング機会があります見ることができるように:
public IQueryable<PersonDto> GetPersons()
{
var personDtos = from p in db.Persons
order by p.LastName, p.FirstName
select Translate(p);
return personDtos;
}
私はそれを実行したとき、私は例外を取得除いて、良いようです:エンティティへ
LINQは方法を認識しない
「を翻訳」この作品を作るための方法はありますか?データモデルのいくつかのクラスにはかなりのプロパティがありますので、可能であれば、ここでTranslateメソッドを呼び出すとよいでしょう。
それが投影を使用することをお勧めします、私はmymodelというのエンティティを転送するAutoMapperを使用するpreffer、それは例db.Persons.Where(...)のために、非常に使いやすいです。ProjectTo()。ToListメソッド()。 –