C# 使用LINQ查询单个列
我希望获取表中单个列的值数组,例如,我有一个名为Customer(ID,Name)的表,并且希望获取所有客户的ID。我在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
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();
}
}
你应该这样做