我想動態地爲LINQ to Entities建立一個LINQ查詢,這樣我就可以避免兩次重複相同的函數。我可以在LINQ to Entities中動態構建where子句嗎?
這裏是我想要做的事:
private IUser GetOrUpdateUser(Predicate<IUser> filter, Func<IIdentityProvider, UserRecord> fetch)
{
var user = (from u in this.adapter.Users
where filter(u)
select u).SingleOrDefault();
if (user == null)
{
// User not found. Add him.
user = this.adapter.AddUser(fetch(this.idenityProvider));
}
else if (user.IsExpired)
{
// User found, but expired. Update him.
this.adapter.UpdateUser(user, fetch(this.idenityProvider));
}
return user;
}
protected IUser GetUserByNetworkId(string username)
{
return GetOrUpdateUser(
u => u.NetworkId == username,
i => i.GetUserByNetworkId(username));
}
protected IUser GetUserByEmail(string email)
{
return GetOrUpdateUser(
u => u.Email == email,
i => i.GetUserByEmail(email));
}
的filter
參數拋出此異常:
的LINQ表達式節點類型「調用」不支持LINQ到實體
我可能做到這一點:
protected IUser GetUserByNetworkId(string username)
{
return GetOrUpdateUser(
from u in this.adapter.Users
where u.NetworkId == username
select u,
i => i.GetUserByNetworkId(username));
}
protected IUser GetUserByEmail(string email)
{
return GetOrUpdateUser(
from u in this.adapter.Users
where u.Email == email
select u,
i => i.GetUserByEmail(email));
}
但是,那不是那麼幹淨。
有什麼建議嗎?
然後我會在where子句中使用什麼語法? – 2010-08-27 14:56:07
我添加了一個代碼示例。 – 2010-08-27 16:16:23