LINQ查询的下一行

问题描述 投票:-4回答:3

为什么mycode的行2无法读取:

var allResarchs = db.Researchs;
allResarchs.Where(a => a.ChiefManagerId == 1);
allResarchs.ToList();
c# linq
3个回答
1
投票

LINQ不会改变输入序列!

allResearches.Where(research => research.ChiefManagerId == 1);

该声明不会改变allResearches。你可以做到以下几点。 (顺便说一下,我已经改变了var到实际的返回类型,让你更好地了解正在发生的事情。)

IQueryable<Research> queryResearches = db.Researches;
IQueryable<Research> queryResearchesWithId1 = queryResearches
    .Where(research => research.ChiefManagerId == 1);
List<Research> researchesWithId1 = queryResearchedWithId1.ToList();

要知道,直到最后一条语句不执行查询时,没有与数据库中没有沟通呢。只有最后声明将实际接触数据库。

当然,你可以把它全部写在一个声明。然而,这不会很大地改善性能:

var researchesWithId1 = db.Researches
    .Where(research => research.ChiefManagerId == 1)
    .ToList();

2
投票

你永远不Where语句的值设置为变量。

var allResarchs = db.Researchs.Where(a => a.ChiefManagerId == 1).ToList();


2
投票

您应该分配LINQ查询的结果:

var allResarchs = db.Researchs;
var filtered = allResarchs.Where(a => a.ChiefManagerId == 1);
var list = filtered.ToList();

你还可以做更简单的方式(如果你不需要中间结果):

var list = db.Researchs.Where(a => a.ChiefManagerId == 1).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.