Entity Frameworkを初めて使用しようとしていますが、ちょっと立ち往生しました。オブジェクトを使用してEntity Frameworkを照会する
私はクラスAccountDataAccessあります、
public class AccountDataAccess
{
public IEnumerable<Account> Get(Account account)
{
}
}
そして、別のクラスをAccountDataAccess.Get()が呼び出されると、アカウントのパラメータ1つまたは複数のフィールドを埋めることができ
public class Account
{
string UserName { get; set; }
string Password { get; set; }
string Email { get; set; }
Session Session { get; set; }
}
アカウント(例えばUserNameだけが値を持つ)。 Entity Frameworkに、値を含むフィールドのみを含む検索を使用してデータベースを照会する方法はありますか?
いくつかのグーグルを行った後、私はそれをやって見ることができる唯一の方法は、
public IEnumerable<Account> Get(Account account)
{
StringBuilder queryStringBuilder = new StringBuilder("SELECT VALUE account FROM MyDatabase.Account as account WHERE ");
if (!String.IsNullOrWhiteSpace(account.UserName))
queryStringBuilder.Append("UserName = " + account.UserName);
if (!String.IsNullOrWhiteSpace(account.Email))
queryStringBuilder.Append("Email = " + account.Email);
...
//continue for all fields
//then call database
}
明らかにこれはしかし、それを行うためのひどい道であるようなものです。何か案は?
EDIT
私は
Account account1 = new Account() {UserName = "UserA", Email = "[email protected]"};
Account account2 = new Account() {UserName = "UserB"};
を持っていたのであれば、フルたとえば、私はaccount1のためのクエリが
var _context = new EntityModel();
return _context.Where(w => w.UserName == account.UserName
&& w.UserName == account1.UserName
&& w.Email == account1.Email
).ToList();
ことを期待するだろうが、account2のクエリは無視します入力されていないメールフィールド:
var _context = new EntityModel();
return _context.Where(w => w.UserName == account2.UserName
).ToList();
私の質問は、動的に生成することができますラムダ式は、値を持つフィールドのみを含めることができますか?あなたはエンティティモデルを持っている後のLINQを使用する必要が
using (var _context = new EntityModel()) {
var value = from c in _ontext
select person
}
:あなたはエンティティモデルを作成し、プロジェクト内のエンティティモデルを使用してのように、データベースからものを引っ張るためにLINQクエリを使用する必要が
ちょっとメモしておきます...あなたのインターフェイスの前にプレフィックスを付けることをお勧めします。アカウントインターフェイスの名前をIAccountに変更する必要があります。 – c0deNinja