Linq to sql Linq到sql-未筛选查询

Linq to sql Linq到sql-未筛选查询,linq-to-sql,Linq To Sql,我对Linq真的很陌生,我正在使用Linq到Sql,如下所示。但是,在下面的示例中,我的where子句从未执行,结果查询尝试从我的表中获取所有记录,甚至忽略take方法 有人能指出我做错了什么吗 var baseQry = db.Table; baseQry.Where(a => a.tab_id == theId); baseQry.Select(o => new { o.name,

我对Linq真的很陌生,我正在使用Linq到Sql,如下所示。但是,在下面的示例中,我的where子句从未执行,结果查询尝试从我的表中获取所有记录,甚至忽略take方法

有人能指出我做错了什么吗

        var baseQry = db.Table;
        baseQry.Where(a => a.tab_id == theId);
        baseQry.Select(o => new
        {
            o.name,
            o.display_name,
            o.type,
            o.info,                
            time_stamp = (Convert.ToDateTime(o.timestamp).ToLongDateString())
        }).Take(10);

       baseQry.ToList();
你的第二行

baseQry.Where(a => a.tab_id == theId);
…本质上是一个no-op,因为生成的查询没有转入.Select子句中

您需要将其更改为:

var baseQry = db.Table;

var results = baseQry
    .Where(a => a.tab_id == theId)
    .Select(o => new
        {
            o.name,
            o.display_name,
            o.type,
            o.info,                
            time_stamp = (Convert.ToDateTime(o.timestamp).ToLongDateString())
        })
    .Take(10)
    .ToList();

谢谢,马特,是的,这很有效。我之所以尝试将其分解,是为了能够根据用户输入动态添加更多where子句。从语法上说,我相信我的代码似乎和你的代码相似,但有一点,你的代码有效,而我的代码无效!!。我曾研究过使用PredicateBuilder和Scott的动态linq库,但在讨论所有这些之前,我想尝试一些简单的方法。任何解释都将不胜感激。IQueryable是你的朋友()。查询的子句(.Where、.Select、.Take)实际上都没有检索数据。它们只是建立一个查询,然后在调用ToList()时执行。您将在LINQ世界中看到这种称为“延迟执行”的方法。好的方面是,只要将查询片段的返回值保存为IQueryable,就可以继续添加它们以进一步修改查询。我希望我能解释清楚。谢谢。我能够使用IQueryable并使其工作。不过相当冗长。非常感谢你的帮助,马特。