如何处理返回0匹配的DataServiceQuery

本文关键字:0匹 DataServiceQuery 返回 何处理 处理 | 更新日期: 2023-09-27 17:54:05

我在Visual Studio 2013中用c#创建了一个简单的WCF数据服务。

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

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

我在第一个文本框中放置了一个代码。我按下按钮。运行以下代码。如果我输入的代码与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;

如何处理返回0匹配的DataServiceQuery

看看这个:-

你在这行得到错误:-

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) 没有返回。单个是异常的原因(序列不包含匹配的元素)

替换为:-

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.
}