我现在有这样对我仓库里的方法:如何构造部分动态的LINQ语句?
public int GetMessageCountBy_Username(string username, bool sent)
{
var query = _dataContext.Messages.AsQueryable();
if (sent)
query = query.Where(x => x.Sender.ToLower() == username.ToLower());
else
query = query.Where(x => x.Recipient.ToLower() == username.ToLower());
return query.Count();
}
目前,它建立了基于该sent
布尔两个查询之一。这是做到这一点的最佳方式,还是有一种方法可以在查询本身内执行此操作吗?我想检查x.Sender
是否等于username
如果sent
等于true。但是我想检查x.Recipient
是否等于username
如果sent
等于false。
然后我想要这个LINQ表达式转换为实体框架中的SQL,我相信它正在做。
我只是想避免重复尽可能多的代码。
Bravo!这更有意义。谢谢。 – Chev 2011-05-25 13:45:27
虽然我修改了一些功能。 lambda声明必须先于inline IF语句。 – Chev 2011-05-25 17:03:02
看起来我一直在接受答案时跳过枪。我应该先测试一下。这绝对有效,但不针对IQueryable。表达式树应该被翻译成一个SQL表达式。这意味着这个LINQ语句不能调用另一个函数,所有相关的数据必须包含在表达式中才能使SQL翻译起作用。一个.ToList()会使它工作,但会牺牲在数据源中执行查询的能力。尽管谢谢你的回答! –
Chev
2011-05-25 18:31:48