LinqとSQLの基礎となるクラスから関係を除いたものに一致するIQueryableエンティティを返すDDDリポジトリを作成したいと思います。エンティティからLinqselectnew {field、field、...}プロジェクションとの関係を差し引いたものを簡単に返すことができます。リポジトリエンティティクラスをコーディングするにはどうすればよいですか?Linq to SQLクラスではなくリポジトリクラスを持つリポジトリからオブジェクトを返し、Linq選択からの複数のエンティティでオブジェクトを埋めるにはどうすればよいですか?この返されたクラスをViewModelでどのように参照しますか?
私はこれに非常に慣れていないので、明らかな間違いです。ボートがないので、リポジトリから完全なエンティティのみを返す必要がありますか?予測ではありませんか?リポジトリから送信する前に、LinqとSQLの関係を取り除く必要があります。私は完全にベースから外れていますか?私は本当にIQueryableデータ型を維持したいと思っています。
たとえば、リポジトリ内のLinqtoSQLコードは次のとおりです。
public class MiniProduct
{
public MiniProduct( string ProductNo, string Name, string Description, double Price)
{ this.ProductNo = ProductNo;
this.Name = Name;
this.Description = Description;
this.Price = Price;
}
}
public IQueryable<MiniProduct> GetProductsByCategory( string productCategory)
{
return ( from p in db.Products
from c in db.Categories
from pc in db.ProductCategories
where c.CategoryName == productCategory &&
c.CatID == pc.CatID &&
pc.ProductID == p.ProductID
select new { p.ProductNo, p.Name, p.Description, p.Price } );
// how to return IQueryable<MiniProduct> instead of IQueryable<AnonymousType>???
}
そして、ビュー(ViewModelを強く入力しようとしています)では、モデルのデータ型は何で、ビューから参照する方法は何ですか?
<% Page Inherits="System.Web.Mvc.ViewPage<MyStore.Models.MiniProduct>" %>
編集:
Cottsakはコードに権限を与えて機能させたので、チェックボックスを獲得しました。ただし、Mark Seemannは、この手法は副作用を引き起こすと指摘しました。彼はあなたのPOCOを投影したりサブセット化したりするのは悪いことだと言っていました。コードを機能させた後、私はエンティティオブジェクトを1トン以上作成することになり、不必要な複雑さを引き起こしました。最終的に、Markの提案を反映するようにコードを変更しました。
Cottsakの提案に追加するには:私のリポジトリの戻り値はIQueryableでした。ページディレクティブモデルの参照型は
Inherits="System.Web.Mvc.ViewPage<IQueryable<MyStore.Models.MiniProduct>>"
モデルフィールドには、次のユーザーがアクセスしました。
Model.SingleOrDefault().ProductNo
Model.SingleOrDefault().Name
...
そしてこれは
foreach (MyStore.Models.MiniProduct myproduct in Model) {}
答えてくれてありがとう。