我想第一次使用实体框架,并且出现了一些问题。使用对象查询实体框架
我有一个类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