Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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
C# LINQ Lambda,分组方式与列表_C#_Database_Linq_Entity Framework_Notsupportedexception - Fatal编程技术网

C# LINQ Lambda,分组方式与列表

C# LINQ Lambda,分组方式与列表,c#,database,linq,entity-framework,notsupportedexception,C#,Database,Linq,Entity Framework,Notsupportedexception,我在找到正确的语法来完成以下任务时遇到了一些问题: 是否可以将LINQ(Lambda表达式)转换为.GroupBy数据,而不是使用通常的.Sum()或.Count(),我希望生成的数据是Int的列表 我定义了自己的类:Filter\u id。其构造函数需要两个参数: public int? type; // Represents the object_type column from my database public List<int?> objects; // Represen

我在找到正确的语法来完成以下任务时遇到了一些问题:

是否可以将LINQ(Lambda表达式)转换为.GroupBy数据,而不是使用通常的.Sum()或.Count(),我希望生成的数据是Int的列表

我定义了自己的类:Filter\u id。其构造函数需要两个参数:

public int? type; // Represents the object_type column from my database
public List<int?> objects; // Represents the object_id column from my database
公共int?类型;//表示数据库中的对象类型列 公共列表对象;//表示数据库中的object_id列 我想将数据库中的数据加载到此对象中。以下LINQ查询应生成筛选器ID列表:

List<Filter_IDs> filterids = ef.filterLine
        .GroupBy(fl => fl.objectType)
    .Select(fl => new Filter_IDs { type = fl.Key, objects = fl.Select(x => x.object_id).ToList() })
    .ToList();
以下LINQ查询应生成筛选器ID列表:

List<Filter_IDs> filterids = ef.filterLine
        .GroupBy(fl => fl.objectType)
    .Select(fl => new Filter_IDs { type = fl.Key, objects = fl.Select(x => x.object_id).ToList() })
    .ToList();
List filterids=ef.filterLine
.GroupBy(fl=>fl.objectType)
.Select(fl=>newfilter\u id{type=fl.Key,objects=fl.Select(x=>x.object\u id).ToList())
.ToList();
使用此查询不会产生生成错误,但会在运行时产生“NotSupportedException”

数据库如下所示,以便您更好地了解数据:

(水滴图像)

提前感谢,,
Gerben

我认为问题在于DB无法在select中调用ToList,也无法创建新的筛选器ID

试着这样做:

List<Filter_IDs> filterids = ef.filterLine.Select(o => new { objectType = o.objectType, object_id=o.object_id})
    .GroupBy(fl => fl.objectType).ToList()
    .Select(fl => new Filter_IDs { type = fl.Key, objects = fl.Select(x => x.object_id).ToList() })
    .ToList();
List filterids=ef.filterLine.Select(o=>new{objectType=o.objectType,object\u id=o.object\u id})
.GroupBy(fl=>fl.objectType).ToList()
.Select(fl=>newfilter\u id{type=fl.Key,objects=fl.Select(x=>x.object\u id).ToList())
.ToList();

您可以在客户端使用GroupBy:

List<Filter_IDs> filterids = ef.filterLine
        .Select(fl=>new {fl.ObjectType, fl.object_id})
        .AsEnumerable()
        .GroupBy(fl => fl.objectType)
    .Select(fl => new Filter_IDs { type = fl.Key, objects = fl.Select(x => x.object_id).ToList() })
    .ToList();
List filterids=ef.filterLine
.Select(fl=>new{fl.ObjectType,fl.object_id})
.可计算的()
.GroupBy(fl=>fl.objectType)
.Select(fl=>newfilter\u id{type=fl.Key,objects=fl.Select(x=>x.object\u id).ToList())
.ToList();
也许你想要

IList<Filter_IDs> filterIds = ef.filterline
    .Select(fl => fl.objectType).Distinct()
    .Select(ot => new Filter_IDs
        {
            type = ot,
            objects = ef.filterline
                          .Where(fl => fl.objectType == ot)
                          .Select(fl =>objectType)
                          .ToList()
        }).ToList();

ef是上下文,filterLine是包含对象id和objectType的数据库表。如果执行
ef.filterLine.ToList()
操作,该操作是否有效?是的,但filterLine的列数不仅仅是objectid和objectType。我不想要其他列中的其他值。这是正确的,对我来说是有效的。谢谢大家和kek。我更喜欢数据库中的groupby。凯克给出的答案对我来说是正确的。我感谢你的帮助!Kek,一般来说,它取决于索引等等,但在这种情况下,我想你是对的。我们可以将AsEnumerable()向下移动一行:)