Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linq:在select子句中使用方法_Linq_Select_Aggregate - Fatal编程技术网

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子句中没有使用方法的方法? 非常感谢。
Yotam

LINQ 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)