首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用LINQ将.Where添加到.Select中?

如何使用LINQ将.Where添加到.Select中?
EN

Stack Overflow用户
提问于 2020-03-14 07:34:08
回答 2查看 438关注 0票数 2

我使用的是LINQ查询。我想要做的是在Start中对数据进行排序,然后根据检索到的行是否将IsAndroid或IsIos设置为true,为AndroidSpeeds或IOSSpeeds选择数据。

以下是我到目前为止提出的问题:

代码语言:javascript
复制
List<LogStart> Start1 = Start
    .Where(x => x.IsPhysical == true)
    .OrderBy(g => g.DateYYMMDD)
    .Select(g => new Start2
    {
        AndroidDBSpeed = (int?)g.Where(gx => gx.IsAndroid).Select(gx => (int?)gx.DBSpeed).DefaultIfEmpty(),
        AndroidCPUSpeed = (int?)g.Where(gx => gx.IsAndroid).Select(gx => (int?)gx.CPUSpeed).DefaultIfEmpty(),
        IOSDBSpeed = (int?)g.Where(gx => gx.IsIos).Select(gx => (int?)gx.DBSpeed).DefaultIfEmpty(),
        IOSCPUSpeed = (int?)g.Where(gx => gx.IsIos).Select(gx => (int?)gx.CPUSpeed).DefaultIfEmpty(),
    })
    .ToList();

然而,存在一个问题。它指向。在哪里说

Program.cs(46,46):Error CS1061:'LogStart‘不包含“Where”和“无可访问扩展方法”的定义,其中可以找到“接受'LogStart’类型的第一个参数”(您是缺少使用指令还是程序集引用?)(CS1061) (宇宙)

有没有人有任何想法,什么可能是错误的,它可以如何修复?

用于引用,同一文件中的以下语句工作正常:

代码语言:javascript
复制
   List<LogStart> Start2 = Start
        .Where(x => x.IsPhysical == true)
        .GroupBy(x => x.DateYYMMDD)
        .OrderBy(g => g.Key)
        .Select(g => new Start2
        {
            DateYYMMDD = g.Key,
            Devices = g.Count(),
            AndroidDBSpeed = (int?) g.Where(gx => gx.IsAndroid).Select(gx => (int?) gx.DBSpeed).DefaultIfEmpty().Average(),
            AndroidCPUSpeed = (int?)g.Where(gx => gx.IsAndroid).Select(gx => (int?)gx.CPUSpeed).DefaultIfEmpty().Average(),
            IOSDBSpeed = (int?)g.Where(gx => gx.IsIos).Select(gx => (int?)gx.DBSpeed).DefaultIfEmpty().Average(),
            IOSCPUSpeed = (int?)g.Where(gx => gx.IsIos).Select(gx => (int?)gx.CPUSpeed).DefaultIfEmpty().Average(),
        })
        .ToList();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-14 08:03:34

分组是第二个工作的原因。

如果你不想分组的话,我怀疑你是在找

代码语言:javascript
复制
var Start1 = Start
.Where(x => x.IsPhysical == true)
.OrderBy(g => g.DateYYMMDD)
.Select(g => new Start2
{
    AndroidDBSpeed  = g.IsAndroid ? (int?) g.DBSpeed :  (int?) null,
    AndroidCPUSpeed = g.IsAndroid ? (int?) g.CPUSpeed : (int?) null,
    IOSDBSpeed      = gx.IsIos    ? (int?) g.DBSpeed  : (int?) null,
    IOSCPUSpeed     = gx.IsIos    ? (int?) g.CPUSpeed : (int?) null,
})
.ToList();
票数 3
EN

Stack Overflow用户

发布于 2020-03-14 07:36:33

事情越简单越好。.Where是一种扩展方法。检查使用语句-除非您使用正确的命名空间(iirc System.Linq),否则您将无法获得该方法。

显然,Start必须是LINQ支持的类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60680690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档