我对编程没有多少经验。我在一个项目上工作(学习)。我正在使用C#4.0和WPF 4与EF(SQLite)。我遇到LINQ问题。
以下是有问题的代码(我希望这已经足够了,如果需要更多,请告诉我)
private void cboSelectCompany_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
using (ShippingEntities context = new ShippingEntities())
{
var companies = from company in context.Deliveries
where company.State == cboSelectCompany.SelectedItem.ToString()
select company;
txtDeliveryName.Text = companies.Name;
txtDeliveryState.Text = companies.State;
}
最后两行不起作用。我误解了LINQ的回归吗?我刚收到此错误
Error 5 'System.Linq.IQueryable<SqliteDemo.Delivery>' does not contain a definition for 'State' and no extension method 'State' accepting a first argument of type 'System.Linq.IQueryable<SqliteDemo.Delivery>' could be found (are you missing a using directive or an assembly reference?) c:\users\dan\documents\visual studio 2010\Projects\SqliteDemo\SqliteDemo\DeliveryCompanies.xaml.cs 49 51 SqliteDemo
如果有人能给我一些指示或参考,我会很感激
答案 0 :(得分:2)
你很亲密!
Linq正在返回一个尚未执行的Queryable交付集。我基于读取代码的猜测是,您最多只期望一个结果,然后您想将这些值放入某种类型的UI中。在这种情况下,您要做的是:
所以,在那里留下带有查询的行,然后将其余部分改为:
var company = companies.FirstOrDefault();
txtDeliveryName.Text = company.Name;
txtDeliveryState.Text = company.State;
根据需要插入空值检查,然后查看First,FirstOrDefault,Single和SingleOrDefault之间的差异,看看哪一个最适合您的特定情况。
答案 1 :(得分:0)
好像,companies.State
似乎无法编译,因为companies
是SqliteDemo.Delivery
的列表(而不仅仅是SqliteDemo.Delivery
)。
你想要达到什么目的?想象一下,你的LINQ查询返回了几个结果,是否可能?
答案 2 :(得分:0)
只需使用companies.FirstOrDefault()
或companies.Single()
来访问第一项,因为默认情况下LINQ会返回项目集合而不仅仅是单项。