C#Silverlight WCF Linq服务从MYSQL数据库中选择

时间:2013-03-28 00:17:46

标签: c# sql-server wcf linq silverlight

我有一个可怕的时间,我有一个任务,无法弄清楚如何工作Silverlight WCF Linq服务。我有一个Locations表中绑定到组合框的值,所以城市正确显示。在SelectionChanged事件上,我想将location_name传递给GetWeather()函数,并显示另一个表中的相关天气。我无法确定如何使用location_name选择相关的P_id,它在weather_id中作为location_id,然后显示相关location_id的天气。

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

我的GetWeather()函数的ServiceReference文件是

[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没有显示任何错误,但它仍未运行...我没有想法

1 个答案:

答案 0 :(得分:2)

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

此代码:

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

实际上会返回collection,而不是单个项目,因此当您尝试使用它时,它可能无法正常工作:

(from o in a.weathers where o.location_id.Equals(identity) select o.weather)

为了表明您只想从查询中返回一个元素,您可以使用FirstSingleFirstOrDefaultSingleOrDefault方法。

例如:

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

我会快速阅读每个方法(First,FirstOrDefault等)以查看哪个方法适合您的用例,但如果您确定将获得1个结果(即location_name在您的数据库中是唯一的),那么使用Single()应该没问题。

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

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

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

或许试一试?


PS。GetWeather()方法中阅读您的查询,我认为也可以将您的两个查询合并为一个调用...但我想也许我们应该得到基地工作,然后从那里开始(遵循“让它工作,让它变得更好”的口头禅)。

PPS。使用DataContext,您应该考虑将其包含在using语句中,或者在您完成工作后将其disposing包裹起来它


我不打算做好这件事,但这是(根据我的有限理解)这个响应中上面列出的FirstSingleOrDefault方法之间的关键区别:< / p>

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