c# Silverlight WCF Linq Service从MSQL数据库中选择

本文关键字:MSQL 数据库 选择 Service Silverlight WCF Linq | 更新日期: 2023-09-27 18:06:26

我有一个可怕的时间,我有一个任务,不知道如何工作的silverlight WCF Linq服务。我将Locations表中的值绑定到组合框中,这样城市就能正确显示了。对于SelectionChanged事件,我希望将location_name传递给GetWeather()函数,并显示另一个表中的相关天气。我不知道如何使用location_name来选择相关的P_id,它在天气表中作为location_id,然后显示来自相关location_id的天气。

这是我到目前为止的代码…但这行不通……我只是希望它很简单,因为c#根本不是我的包。

GetWeather()函数的servicerreference文件是

[OperationContract]
public string GetWeather(string location_name)
{
    DataClasses1DataContext a = new DataClasses1DataContext();
    var identity = (from o in a.locations
                    where o.location_name == location_name
                    select o.P_Id);
    var weatherType = (from o in a.weathers
                       where o.location_id.Equals(identity)
                       select o.weather).ToString();
    return weatherType;
}

和c#主页面中的代码在这里…我做错了什么…

private void location_cmb_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    a.GetWeatherCompleted += new EventHandler<GetWeatherCompletedEventArgs>(a_GetWeatherCompleted);
    a.GetWeatherAsync(location_cmb.SelectedItem.ToString());
}
void a_GetWeatherCompleted(object sender, GetWeatherCompletedEventArgs e)
{
    textBlock2.Text = e.Result;
}

Visual Studio没有显示任何错误,但它仍然没有运行…I ' m out of ideas

c# Silverlight WCF Linq Service从MSQL数据库中选择

我不确定这是它,但一些事情我已经注意到:

这个代码:

(from o in a.locations where o.location_name == location_name select o.P_Id)

实际上返回一个集合,而不是单个项目,所以当你尝试在:

中使用它时,它可能无法正常工作。
(from o in a.weathers where o.location_id.Equals(identity) select o.weather)

为了表明您只希望从查询中返回一个元素,您可以使用First, Single, FirstOrDefault或SingleOrDefault方法。

例如:

var identity = (from o in a.locations where o.location_name == location_name select o.P_Id).Single();

我会快速阅读每个方法(首先,FirstOrDefault等),看看哪一个适合你的用例,但如果你确信你会得到1个结果(即location_name在你的数据库中是唯一的),那么使用Single()应该是OK的。

这会让您获得identity(我假设是整数类型),您可以在以下查询中使用它:

var weatherType = (from o in a.weathers where o.location_id == identity select o.weather).Single();

获取单个记录…我在这里假设。weather(即数据库中类/列中的weather属性)是一个字符串,并且您只想要/期望一条记录。

也许试一试?


p。GetWeather()方法中阅读您的查询,我认为也可以将您的两个查询合并为单个调用…但我认为也许我们应该让基础工作,然后从那里开始(遵循"让它工作,让它更好"的咒语)。

pp。对于您的DataContext,您可能应该考虑将其包装在using语句中,或者在完成使用后处理它。


我不打算做得很好,但这里是(从我有限的理解)First, SingleOrDefault方法之间的关键区别:

  • First返回集合中的第一项,如果集合为空(零元素)则抛出异常
  • FirstOrDefault返回集合中的第一项,如果集合为空(零元素)则返回null
  • Single返回集合中唯一的项,如果集合中没有一个项则抛出异常
  • SingleOrDefault返回集合中的第一项,如果集合为空(零元素)则返回null,如果集合有超过1个元素则抛出异常