我想第一次使用實體框架,並且出現了一些問題。使用對象查詢實體框架
我有一個類AccountDataAccess:
public class AccountDataAccess
{
public IEnumerable<Account> Get(Account account)
{
}
}
而另一個類,賬戶
public class Account
{
string UserName { get; set; }
string Password { get; set; }
string Email { get; set; }
Session Session { get; set; }
}
當AccountDataAccess.Get()被調用時,一個或多個賬戶參數的字段可以填充(例如,只有用戶名有一個值)。 在Entity Framework中有沒有一種方法可以通過僅包含包含值的字段的搜索來查詢數據庫?
做一些google搜索,我可以看到這樣做的唯一方法後是一樣的東西
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
}
顯然,這是雖然做這件事的可怕方式。有任何想法嗎?
編輯
因此,對於一個完整的例子,如果我有
Account account1 = new Account() {UserName = "UserA", Email = "[email protected]"};
Account account2 = new Account() {UserName = "UserB"};
我希望爲帳戶1查詢是
var _context = new EntityModel();
return _context.Where(w => w.UserName == account.UserName
&& w.UserName == account1.UserName
&& w.Email == account1.Email
).ToList();
但查詢帳戶2忽略電子郵件字段,因爲它沒有填充:
var _context = new EntityModel();
return _context.Where(w => w.UserName == account2.UserName
).ToList();
所以我想我的問題是我可以動態生成的lambda表達式只包含有值的字段?
只是一個說明...它是一個很好的做法,以您的界面與我...的前綴...所以你應該重命名賬戶界面爲IAccount。 – c0deNinja 2012-03-11 00:09:15