Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 选择常量并与另一个列表合并_C#_Entity Framework_Linq - Fatal编程技术网

C# 选择常量并与另一个列表合并

C# 选择常量并与另一个列表合并,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个包含pk和sName列的类别表。我想添加具有常量值的其他行,例如 pk=-1,sName=“无” 这样,用户可以选择“无”行(如果他们愿意) 下面是检索类别的代码 var catList = from c in context.Category where c.iStatus == 1 && c.iCat1ID == Cat1ID select new { c.pk, c.sName }; 下面是检索常量行的代码

我有一个包含pk和
sName
列的类别表。我想添加具有常量值的其他行,例如
pk=-1,sName=“无”
这样,用户可以选择
“无”
行(如果他们愿意)

下面是检索类别的代码

var catList = from c in context.Category
              where c.iStatus == 1 && c.iCat1ID == Cat1ID
              select new { c.pk, c.sName };
下面是检索常量行的代码

var noneList = from c in context.Category
               select new { pk = -1, sName = "  NONE" };
然后我将
noneList
添加到
catList

catList = catList.Union(noneList);
当类别表中至少有一行时,这种方法可以正常工作。当类别表中有0行时,
noneList
将不会从查询中获取任何内容,
catList
将不会有
的“NONE”行

我已经搜索了很多如何与常数行合并的方法,但是我没有找到一个满足我的情况的示例

这是另一个尝试

var catList = from c in context.Category
              where c.iStatus == 1 && c.iCat1ID == Cat1ID
              select new { c.pk, c.sName };

var noneList = new[] { new { pk = -1, sName = " NONE" }};

catList = catList.Union(noneList);
此代码在设计时不会给出任何错误,但当我运行它时,它会抛出:

无法创建“匿名类型”类型的常量值。在此上下文中仅支持基元类型或枚举类型

[编辑] 通过将catList转换为数组,它看起来不会引发任何异常

var aa = CatList.ToArray().Union(NoneList);

欢迎提出任何其他建议。

是实体框架吗?首先具体化查询以在内存中执行联合。通过调用
castList.ToArray().Union()
(或
ToList()
)。

请注意,虽然
AsEnumerable()
可以在这里工作,但它不是通过具体化查询来实现的。它实际上只是将对象强制转换为
IEnumerable
,以便使用正确的提供程序进行查询。因此,它肯定比使用例如
ToArray()
ToList()
更可取。我不确定您是否打算这样做,但我刚刚创建了另一个变量并将catList转换为数组,并与noneList进行了并集。我不喜欢这样做,但这似乎是我唯一的选择,除非我可以在一个linq查询中使用常量行实现union。此外,我发现我需要一个列表作为最终结果,因为我要将它绑定到下拉组合框,所以我在最后使用aa.list()。当我在表中有许多记录并且我有.ToArray()和.ToList()时,它的性能会有多高?是的,它是实体框架!这里的“问题”是使EF生成适当的SQL。您能用纯SQL编写您想要的查询吗?我不确定。所以EF也不能。因此,首先在内存中读取并加载数据,然后根据需要进行联合。LINQ到对象比LINQ到实体要灵活得多。您可以链接调用,因此不需要额外的变量,这是非常简单、可读和常见的事情(当您想要EF不能做的事情时,无法为其生成SQL)