私の最初の質問はhereです。リポジトリ・パターンと作業ユニットを使用してデータベースから戻された列の数を制限する方法を見つけようとしていました。私の質問は答えを見つけましたが、私はそれを解決していないし、私が今行っている問題が全く新しい主題であるので、そのテクニックを使って生まれた新しい問題を投稿することに決めました。リポジトリにダイナミックLinqラムダで選択
、私は次のパラメータを取りますGetメソッドがあります。
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<TEntity, TEntity> selector = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
を以下の私のコントローラの内部でうまく機能:
IEnumerable<Models.Authors.Author> authors = unitOfWork.AuthorRepository.Get(filter: x => x.TenantID == 1);
しかし、私は「を選択することができません'部分の作業:
IEnumerable<Models.Authors.Author> authors = unitOfWork.AuthorRepository.Get(filter: x => x.TenantID == 1, selector: a=> new { FirstName = a.FirstName });
と同様に、この:
var authors = unitOfWork.AuthorRepository.Get(filter: x => x.TenantID == 1, selector: a=> new { FirstName = a.FirstName });
は、次の2つのエラーを与える:
Cannot implicitly convert type '<anonymous type: string FirstName>' to 'Models.Authors.Author'
と
Cannot convert lambda expression to intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type
私はこれに完全に外国人です。だから私は本当に
が
を更新しました。..あなたの助けをいただければ幸いですこの:
The entity or complex type 'DAL.Author' cannot be constructed in a LINQ to Entities query.
UPDATE 2:著者のクラス //名前空間
IEnumerable<Models.Authors.Author> authors = unitOfWork.AuthorRepository.Get(filter: x => x.TenantID == 1, selector: a=> new Models.Authors.Author() { FirstName = a.FirstName });
この与えは
ですnamespace Models.Authors
{
public class Author
{
[Key]
public int AuthorID { get; set; }
public int CategoryID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string PhotoPath { get; set; }
public byte[] PhotoBinary { get; set; }
public string PhotoPathOriginal { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public Guid? PassGuid { get; set; }
public string Email { get; set; }
public string Twitter { get; set; }
public string Facebook { get; set; }
public DateTime? DateCreated { get; set; }
public DateTime? DateLastlogin { get; set; }
public int AuthorStatus { get; set; } // 0:inactive, 1:active, 2:suspended, 3:hidden etc.
public string AboutAuthor { get; set; }
public bool? RequirePublishApproval { get; set; }
public string ColumnName { get; set; }
public string ColumnImage { get; set; }
public bool? ChangePassAtFirstLogin { get; set; }
public int TenantID { get; set; }
public virtual AuthorCategory AuthorCategory { get; set; }
public virtual IQueryable<Post.Post> Posts { get; set; }
}
}
あなたの選択操作の戻り値の型は 'Authors.Author'であることを行っていない...あなたはあなたが選択をするときに、新しい、匿名のタイプを予測しています。あなたが何をしようとしているかによって、作者を 'var 'と宣言するだけです。 –
動的LINQの使用を検討してください。または[this](http://stackoverflow.com/a/723018/861716)を見てください。これは重複した質問です。 –
Gertさんありがとうございますが、私のために消化するにはあまりにも多くのことがあります。単純な作業のように思えるものは、コードを書くのが大量である場合は、リポジトリパターンを取り除く方が良いかもしれません。 –