如何处理返回0匹配的DataServiceQuery

时间:2014-03-27 19:59:21

标签: c# asp.net wcf

我在c#。

中在Visual Studio 2013中创建了一个简单的WCF数据服务

然后我使用asp.net和c#创建了一个Web应用程序。

我有2个文本框和一个按钮。

我在第一个文本框中放了一个代码。我按下按钮。以下代码运行。如果我输入的代码与webservice公开的列表中的记录匹配,则没有问题。

但是,如果我输入一个不存在的代码,我没有线索如何测试。现在唯一可行的是Try Catch,但我无法相信这是正确的。

 var proxy = new NorthwindEntities(new Uri("http://localhost:27214/NorthwindCustomers.svc"));

            var customers = proxy.Customers;

            if (string.IsNullOrEmpty(Code.Text))
            { return; }

            var customer = (from c in customers where c.CustomerID == Code.Text select c).Single();

            if (customer == null) //If there are no customers... it gives me an error.
            {
                Nom.Text = null;
            }
            else
            {
                Nom.Text = customer.CompanyName;
            }

            Code.Text = string.Empty;

1 个答案:

答案 0 :(得分:2)

看看这个: -

你在这一行收到错误: -

var customer = (from c in customers where c.CustomerID == Code.Text select c).Single();

因为(from c in customers where c.CustomerID == Code.Text select c) 没有返回 nothing.Single 是异常的原因(序列不包含匹配的元素

将其替换为: -

var customer = customers.FirstOrDefault(c=> c.CustomerID == Code.Text);

var customer = (from c in customers where c.CustomerID == Code.Text select c).SingleOrDefault();

它将解决问题。

作为一条建议,请将此代码包装在集合的空检查中: -

if(customers != null)
{
var customer = customers.FirstOrDefault(c=> c.CustomerID == Code.Text);
.....
..... // Other code.
}