C# 理解Linq查询的基本原理

C# 理解Linq查询的基本原理,c#,sql,asp.net,linq,C#,Sql,Asp.net,Linq,假设我的数据库中有一个名为Table1的表。我在表1中有3列 在sql中,我只需从表1中选择*,它将显示该特定表中的所有内容。然而,我试图理解的是,如何使用C中的Linq从该表中选择所有值。表1在数据库中,前端正在使用ASP.NET和C开发。我似乎无法理解这一点。我对linq的了解很少,所以如果我犯了一个明显的错误,请原谅请参阅下面的链接,了解linq的介绍 Linq提供了一种查询数据的方法,但您仍然需要提供一种Linq访问该数据的方法——可以是通过Linq2Sql类、ADO、实体框架等 我是E

假设我的数据库中有一个名为Table1的表。我在表1中有3列


在sql中,我只需从表1中选择*,它将显示该特定表中的所有内容。然而,我试图理解的是,如何使用C中的Linq从该表中选择所有值。表1在数据库中,前端正在使用ASP.NET和C开发。我似乎无法理解这一点。我对linq的了解很少,所以如果我犯了一个明显的错误,请原谅

请参阅下面的链接,了解linq的介绍

Linq提供了一种查询数据的方法,但您仍然需要提供一种Linq访问该数据的方法——可以是通过Linq2Sql类、ADO、实体框架等

我是EntityFrameworkEF的粉丝,在这里可以设置表示数据的对象,并使用上下文填充这些对象

它可能看起来像这样:

public class Table1
{
    public string FirstName { get; set; }
    public string SurName { get; set; }
    public DateTime DOB { get; set; }
}

public class Table1Repository
{
    private readonly MyEntities _context;

    public Table1Repository()
    {
        this._context = new MyEntities();
    }

    public IQueryable<Table1> Get()
    {
        return this._context.Table1; // in effect your "Select * from table1"
    }

    public IQueryable<Table1> GetById(DateTime dob)
    {
        return this._context.Table1.Where(w => w.DOB == dob); // pulls records with a dob matching param - using lambda here but there is also "query expression syntax" which looks more like sql
    }
}


请注意,您正在表示数据的上下文上执行linq查询,而不是数据库本身。Linq非常强大,但您需要为它提供一种访问数据的方法。即使数据是xml、文件、数据库之类的

在Linq2Sql中,您只需通过

从datacontext开始:

var db = new YourDataContext()
然后你可以做类似的事情

var myData = from row
             in db.table1
             select row
正如你指出的那样,你的知识太有限了。查看有关L2S的本系列:

由于您使用的是EF6,因此可以使用LinqToEntity读取表格

public ObservableCollection<Table1> ReadTable1()
{            
    using (YourDBContext dc = new YourDBContext())
    {
        var data = (from x in dc.Table1 
                    select x);

        return new ObservableCollection<Table1>(data);
    }            
}

LINQ只是一种查询语言。它不是特定于数据库的。我建议你们看一看类似ORM的实体框架,因为它可以帮你们做很多工作。您可能还想暂时不使用数据库,只需在基本内存数组上练习使用LINQ即可。@Arran我目前正在开发的网站使用EF 6,我已经完成了一半的项目,因此需要尽快习惯。我很感激你的建议意味着语言集成查询-它用于查询语言中集成的内容。例如,您可以使用.Where查询列表。实际上,它与数据库没有多大关系。@DionV。它与数据库有关,但并非与数据库有关。LINQ的一半功能是从集成到语言中的查询语言查询外部资源(如数据库)。LINQ只有一半用于查询内存中的数据序列。@Servy只是为了说明我的观点,因为我很固执;不。LINQ本身与数据库无关。像LINQ到SQL这样的扩展是可以实现的。OP没有特别要求它们中的任何一个,这意味着我给了他最简单的一个定义。为什么你要对数据进行无意义的投影?如果您没有要执行的操作,请忽略它。谢谢您的详细回答
public ObservableCollection<Table1> ReadTable1()
{            
    using (YourDBContext dc = new YourDBContext())
    {
        var data = (from x in dc.Table1 
                    select x);

        return new ObservableCollection<Table1>(data);
    }            
}