2011-11-03 33 views
11

尝试LINQ的使用LinqPad与如何开始它得到frustated学习非常基本的LINQ运行SQL查询。比方说,我想编写一个C#Expression和一个C#语句,在SQL Server中有一个名为Products的表格,并且我想拉取价格大于50的所有行。你会怎样写它?步骤初学者使用Linqpad

回答

16

比方说,我想写一个C#表达和C#statment,我 有一个名为Products的SQL服务器中的表,我想拉动所有的行 ,其中价格大于50.如何将它写入?

LINQPad为你自动构建类型化的DataContext,所以你不需要实例化任何东西。在C#表达式模式下,只需键入以下内容:

Products.Where(p => p.Price > 50) 

并按F5。或者,你可能更愿意使用一个查询表达式:

from p in Products 
where p.Price > 50 
select p 

在C#中的语句模式,你需要调用dump()方法来告诉它写出来的结果。您还需要用分号来终止表达式:

Products.Where(p => p.Price > 50).Dump(); 

有在LINQPad的样品部分更多的例子 - 看5分钟的诱导。

+0

谢谢@Joe。这正是我所期待的。顺便说一句exprssion工作得很好,但是当我运行“从产品中p在p.Price> 50选择p”的说法我得到错误“;预计”。我加 ;最后,但这也没有帮助。有任何想法吗? –

+0

这是因为您已选择了C#语句。声明必须以;但表情不能以;我只是跳过所有这些困惑,并与C#程序:) – Joe

+0

@Joe你能帮我这个问题:) http://stackoverflow.com/questions/19291255/linqpad-doesnt-render-group-collection – AuthorProxy

3
var db = new MyDatabaseContext(); // Your database context. 
var result = db.Products.Where(q=>q.Price > 50); 

...其中db代表您的ORM上下文。 Price表示您映射到数据库中的Price字段。 result代表结果集 - 您的数据库行/实体。

+0

它给出“无法找到类型或命名空间名'MyDatabaseContext'”。对不起我的无知,但我对Linq/ORM完全陌生。我需要在Linqpad中设置一些东西吗?我的印象是,我可以像使用SQL管理工作室一样直接使用linq to sql,并直接查询数据库表 –

+0

您需要创建数据库映射。 'MyDatabaseContext'只是你称为ORM的虚拟名称。 –

+0

你知道我在哪里可以在LinqPad中创建映射吗? –

0

退房:http://msdn.microsoft.com/en-us/library/bb397933(v=vs.90).aspx,这将给你介绍LINQ和使用lambda表达式。

然后看看http://msdn.microsoft.com/en-us/library/bb386927.aspx,这将给你的基础知识,但回答您的具体问题:

var products = db.Products.Where(prod => prod.Price > 50); 
foreach(var product in products) 
{ 
    //do something 
} 
+0

当我作为一个C#程序运行它,我得到以下错误“'LINQPad.User.Products'不包含'Price'的定义,并且没有可接受'LINQPad.User.Products'类型的第一个参数的扩展方法'Price'”。我究竟做错了什么? –

+0

您需要创建数据库映射。你看看我发布的Linq 2 SQL教程链接了吗?这涵盖了基础知识。你有一个产品表的数据库? – Maess

+0

是的,我看到了,但在LinqPad中,我似乎找到的唯一选择是添加连接。一旦我添加连接到我的SQL Server数据库实例,我可以看到左侧的所有数据库/表等。我只是不知道或看到任何optons如何以及在哪里创建数据库映射 –

5

只想添加 - LINQ垫的复数形式 - 我不知道这一点,它让我抓狂了好15分钟

我试图从一个叫做DentalApplication

DentalApplication.Where(a=> a.PackageID > 0) 

给了表中选择我这个错误

'LINQPad.User.DentalApplication' does not contain a definition for 'Where' 

改成了

DentalApplications.Where(a=> a.PackageID > 0) 

它的工作

+0

默认情况下,Linqpad复数的子关联属性。请参阅http://stackoverflow.com/questions/7833133/linqpad-adds-an-s-to-the-end-of-every-table – maoyang