linq:在select子句中使用方法
我很伤心,决定和你分享我的问题 我想从几个表中创建一个匿名选择,其中一些表可能包含多个结果。我想将这些结果连接成一个字符串 我是这样做的:linq:在select子句中使用方法,linq,select,aggregate,Linq,Select,Aggregate,我很伤心,决定和你分享我的问题 我想从几个表中创建一个匿名选择,其中一些表可能包含多个结果。我想将这些结果连接成一个字符串 我是这样做的: var resultTable = from item in dc.table select new { id= item.id, name= CreateString((from name
var resultTable = from item in dc.table
select new
{
id= item.id,
name= CreateString((from name in item.Ref_Items_Names
select name.Name).ToList()),
};
CreateString()是:
我得到一个异常,“dc.GetCommand()”无法理解使用聚合方法的查询
后来我甚至尝试使用这个简单的查询:
var resultTable = from itemin dc.table
select new
{
name = CreateString()
};
当CreateString()返回“success”时,“name”中未插入任何内容
为什么在select子句中没有使用方法的方法?
非常感谢。
YotamLINQ to objects和LINQ to some db provider之间存在差异。一般来说,在使用
IQueryable
时,您不能使用任何方法,除非您的提供者能够理解
您可以做的是从数据库检索数据,然后使用LINQ对对象进行格式化:
var data = from item in dc.table
where /* some condition */
select item;
var result = from item in data.AsEnumerable()
select new
{
name = SomeFunction(item)
}
扩展方法强制使用LINQ到对象进行处理。LINQ到对象和LINQ到某些db提供程序之间存在差异。一般来说,在使用
IQueryable
时,您不能使用任何方法,除非您的提供者能够理解
您可以做的是从数据库检索数据,然后使用LINQ对对象进行格式化:
var data = from item in dc.table
where /* some condition */
select item;
var result = from item in data.AsEnumerable()
select new
{
name = SomeFunction(item)
}
扩展方法强制使用LINQ处理对象。如果我没有解释您的问题,请原谅。看起来您试图做的是抽象您的select方法以供重用。如果是这种情况,您可以考虑使用lambda表达式进行投影。例如:
internal static class MyProjectors
{
internal static Expression<Func<Object1, ReturnObject>> StringDataProjector
{
get
{
return d => new Object1()
{
//assignment here
}
}
}
}
至于连接逻辑,选择一个带有
IEnumerable
属性和只读属性的基类来处理字符串的连接怎么样?如果我没有解释您的问题,请原谅。看起来您试图做的是抽象您的select方法以供重用。如果是这种情况,您可以考虑使用lambda表达式进行投影。例如:
internal static class MyProjectors
{
internal static Expression<Func<Object1, ReturnObject>> StringDataProjector
{
get
{
return d => new Object1()
{
//assignment here
}
}
}
}
至于连接逻辑,如何选择具有
IEnumerable
属性和只读属性的基类来处理字符串的连接呢?感谢您的快速回答,但问题是我无法在不迭代的情况下将IEnumerable转换为DataTable。我试着把它转换成IQuerable,但是我总是得到一个空表迭代有什么问题?这就是IEnumerable
的用途!问题是时间,当有12000行时,我需要为每行从DB中插入30个值,这需要时间,我希望在quary中这样做以节省迭代时间,但不幸的是,我需要将这些值插入Datatable,而没有ToDataTable()方法或IEnumerableThanks获得快速答案,但问题是我无法在不迭代的情况下将IEnumerable转换为DataTable。我试着把它转换成IQuerable,但是我总是得到一个空表迭代有什么问题?这就是IEnumerable
的用途!问题是时间,当有12000行时,为每行插入30个需要从DB中提取的值可能需要时间,我希望在quary中这样做以节省迭代时间,但不幸的是,我需要将这些值插入Datatable,对于IQuerable或IEnumerable没有ToDataTable()方法
dc.Table.Select(MyProjectors.StringDataProjector)