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
我不确定这是它,但一些事情我已经注意到:
这个代码:(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个元素则抛出异常