我有一个最奇怪的问题。当我在ToList()
集合上IQueryble
时,集合中的括号(以及括号内的内容)会被神秘地删除。
public IEnumerable<SurveyQuestion> GetByPeriodId(int peridId)
{
IQueryable<SurveyQuestion> list = Find(x => x.PeriodId == peridId);
var items = list.ToList();
return items;
}
list
包含以下sql语句
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Question] AS [Question],
[Extent1].[SurveyAnswerTypeId] AS [SurveyAnswerTypeId],
[Extent1].[ReportQuestionId] AS [ReportQuestionId],
[Extent1].[SurveyTemplateQuestionId] AS [SurveyTemplateQuestionId],
[Extent1].[PeriodId] AS [PeriodId],
[Extent1].[MaxPoint] AS [MaxPoint]
FROM [dbo].[SurveyQuestion] AS [Extent1]
WHERE [Extent1].[PeriodId] = 1062
其中一个问题栏目包含
&#34;以下是一些事情:[汽车,刀具,房子]&#34;
但在对集合执行ToList()
后,字符串将更改为
&#34;以下是一些事情:&#34;
这是怎么回事?!
答案 0 :(得分:0)
当您对可查询ToList()
执行执行查询时。即SQL查询被发送到数据库服务器,在那里执行查询,结果被下载并映射到内存中的实体。并获得SurveyQuestion
个实体的列表(如果SQL查询有一些结果)。如果要将查询结果转储到字符串,可以迭代它们并将每个对象保存为字符串,也可以序列化结果。例如。得到问题:
string questions = String.Join(Environment.NewLine, items.Select(i => i.Question));
或者您可以迭代项目并阅读他们的问题
foreach(var item in items)
{
string question = item.Question;
// ...
}
答案 1 :(得分:0)
我想出了这个。问题是实体框架正在兑现清单items
,因为这是在同一DbContext
期间被操纵的。因此它没有使用数据库中的项填充列表。它保留了旧的,更改的列表。
如果你使用它很好,但如果你(像我一样)不期望这种行为会让你感到困惑。