不确定怎么说这个但是这里有。我正在使用linq为服务器编写服务层。我已经有了数据库设置,并且我继承了使用Entity层的类(它将被WCF层替换为正确使用JSON - 这个项目的软件需求)。我目前正在编写一个名为“JoinCalendar”的方法(应用程序的一个主要部分),我想证明用户有效加入日历。
这是startes的代码
public bool JoinCalendar(int famID, string email)
{
using (FamilySchedulerEntities db = new FamilySchedulerEntities())
{
var checkUser = (from u in db.Users
where u.familyID.Equals(famID) && !u.emailAddress.Equals(email, StringComparison.InvariantCultureIgnoreCase)
select u).FirstOrDefault();
if( checkuser != null){ return false}
else
{
//stuff
return true;
}
此方法的目的是获取用户正在尝试加入的日历的familyID(一组用户的标识字段)以及用户emailaddress(每个用户的唯一ID)。我想从该查询中执行两个不同的检查。
首先:我想检查familyID是否有效(即确保familyID是存储在数据库中的实际值) 其次:检查用户的电子邮件地址是否与注册到任何家庭的用户不匹配 第三:我可以使用“!” linq查询中的运算符oris it bad practice / ttiquette
亲切的问候, 西蒙约翰逊PS。只使用linq(实际上是编写数据库应用程序)不到一周,所以请保持这个新手友好。理想情况下,我需要一个超级elegenat解决方案,因为该服务器的客户端可能使用蜂窝(即非wifi)连接进行连接,我需要将数据传输保持在绝对最小值。如果最好的解决方案是 hard ,那么请解释它吧。
答案 0 :(得分:1)
您的两个要求可以表达为:
bool familyExists = db.Users.Any(u => u.familyID == famID);
bool emailTakenAlready = db.Users.Any(u => u.emailAddress == email);
这些似乎是独立的要求,因此您可以对它们进行单独的查询。
你肯定可以在Linq查询中使用逻辑not(!
),这只是个人风格的问题。
答案 1 :(得分:1)
您可以像这样简化:
public bool JoinCalendar(int famID, string email)
{
using (var db = new DataContext())
{
var exists = db.Users.Any(u => u.familyID == famID && u.emailAddress != email);
if (exists)
{
return false;
}
//stuff
return true;
}
}
它也应该是最有效的,因为该查询可以由数据库优化。