C# 使用LINQ查询单个列

C# 使用LINQ查询单个列,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我希望获取表中单个列的值数组,例如,我有一个名为Customer(ID,Name)的表,并且希望获取所有客户的ID。我在LINQ中的查询是: var ids = db.Customers.Select(c=>c.ID).ToList(); 此查询的答案是正确的,但我运行了SQL Server Profiler,看到了如下查询: SELECT [t0].[ID], [t0].[Name] FROM [dbo].[Customer] AS [t0] var ids = DBMH.GetSi

我希望获取表中单个列的值数组,例如,我有一个名为Customer(ID,Name)的表,并且希望获取所有客户的ID。我在LINQ中的查询是:

var ids = db.Customers.Select(c=>c.ID).ToList();
此查询的答案是正确的,但我运行了SQL Server Profiler,看到了如下查询:

SELECT [t0].[ID], [t0].[Name] FROM [dbo].[Customer] AS [t0]
var ids = DBMH.GetSingleColumn<Customer, int>(null, c => c.ID);
我知道LINQ选择所有列,然后创建ID字段的整数数组

如何编写在SQL Server中生成此查询的LINQ查询:

SELECT [t0].[ID] FROM [dbo].[Customer] AS [t0]
多谢各位

更新:我有一个函数用于执行此操作,此函数会导致以下结果:

public static List<TResult> GetSingleColumn<T, TResult>(Func<T, bool> predicate, Func<T, TResult> select) where T : class
{
    using (var db = new DBModelDataContext())
    {
        var q = db.GetTable<T>().AsQueryable();
        if (predicate != null)
            q = q.Where(predicate).AsQueryable();
        return q.Select(select).ToList();
    }
}
publicstaticlist GetSingleColumn(Func谓词,Func选择),其中T:class
{
使用(var db=new DBModelDataContext())
{
var q=db.GetTable().AsQueryable();
if(谓词!=null)
q=q.Where(谓词).AsQueryable();
返回q.Select(Select.ToList();
}
}
然后像这样使用它:

SELECT [t0].[ID], [t0].[Name] FROM [dbo].[Customer] AS [t0]
var ids = DBMH.GetSingleColumn<Customer, int>(null, c => c.ID);
varids=DBMH.GetSingleColumn(null,c=>c.ID);

如果只选择所需的字段,则会缩小结果SQL查询的范围。试试这个:

var ids = from customer in db.Customers
          select customer.ID;
修理

公共静态列表GetSingleColumn
(
表达式谓词,
表达式(选择),其中T:class
{ 
由于您使用的是
Func
实例而不是
Expression
实例,因此您使用的是
可枚举。Where
可枚举。选择
而不是
可查询。Where
可查询。选择
。这会导致本地解析而不是数据库端解析 决议

公共静态列表GetSingleColumn(
表达式谓词,
表达式(选择),其中T:class
{
使用(var db=GetData())
{
var q=db.GetTable().AsQueryable();
if(谓词!=null)
q=q.Where(谓词).AsQueryable();
变量q2=q.Select(选择);
返回q2.ToList();
}
}
你应该这样做