C# Silverlight WCF RIA服务。布尔方法的检查结果

C# Silverlight WCF RIA服务。布尔方法的检查结果,c#,silverlight,wcf,wcf-ria-services,C#,Silverlight,Wcf,Wcf Ria Services,Silverlight应用程序使用WCF RIA服务连接到SQL Server数据库。在向表中插入一组新记录之前,我应该检查该表是否在其中一个字段中包含任何具有特定值的记录 域服务类中的我的服务器端方法: [Invoke] public bool CheckRec(string nameFilter) { bool res = false; if (this.ObjectContext.MyTest.FirstOrDefault(p =&g

Silverlight应用程序使用WCF RIA服务连接到SQL Server数据库。在向表中插入一组新记录之前,我应该检查该表是否在其中一个字段中包含任何具有特定值的记录

域服务类中的我的服务器端方法:

    [Invoke]
    public bool CheckRec(string nameFilter)
    {
        bool res = false;
        if (this.ObjectContext.MyTest.FirstOrDefault(p => p.Name == nameFilter) != null)
        {
            res = true;
        }            
        return res;
    }
如何在客户端上检查方法结果? 我正在尝试以下方法,但需要一些帮助才能正确实施:

MyTestContext testcontext = new MyTestContext();
string tname =  savetdlg.TNameTBox.Text;
testcontext.CheckRec(tname).Completed += (df, fg) => 
                {
                    bool notunique = ?????? // how to get result of the method?
                    if (notunique == true)
                    {
                        //todo if record exists
                    }
                    else
                    {
                        //todo if record doesn't exist
                    }                   
                };

好的,按以下方式进行:

MyTestContext testcontext = new MyTestContext();
string tname =  savetdlg.TNameTBox.Text;

testcontext.CheckRec(tname, context_CheckRecCompleted, null);

void context_CheckRecCompleted(InvokeOperation<bool> op)
    {
        bool notunique = op.Value;
        if (notunique == true)
        {
            //todo if record exists
        }
        else
        {
            //todo if record doesn't exist
        }
    }
MyTestContext testcontext=newmytestcontext();
字符串tname=savetdlg.TNameTBox.Text;
CheckRec(tname,context\u CheckRecCompleted,null);
void context_CheckRecCompleted(调用操作op)
{
布尔非唯一=运算值;
if(notunique==true)
{
//如果记录存在,则执行todo
}
其他的
{
//如果记录不存在,则要执行的操作
}
}

orthogonal,但是您的检查可以写为returnthis.ObjectContext.MyTest.Any(p=>p.Name==nameFilter);根据上下文和检查原因,您还可以将该“if”检查添加到执行插入的服务器调用的开头。当然,如果您需要两个单独的调用(例如,要上传/写入的记录数量非常多,而且您通常不需要写入记录),那么无需担心。:)IMHO您不应该在操作开始后使用这种类型的连接到已完成事件(或类似类型的事件)-如果您无论如何都要在“内联”lambda中定义逻辑,只需调用允许您在操作中传递的重载,IMHO:)在一个操作已经开始后连接到“completed”看起来就像是你故意添加了一个竞态条件,虽然很容易避免,但我承认这不太可能发生。只是好奇,为什么要将第二个参数传递为x=>context\u CheckRecCompleted(x),而不是context\u CheckRecCompleted(x)?这并不重要,只是好奇:)@James Manning是的,你是对的。更正了代码。谢谢