c# - 如何使用 LINQ 将 .Where 添加到 .Select 到对象中?

标签 c# linq

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

这是我到目前为止的查询:

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' does not contain a definition for 'Where' and no accessible extension method 'Where' accepting a first argument of type 'LogStart' could be found (are you missing a using directive or an assembly reference?) (CS1061) (Cosmos)

有人知道可能出现什么问题以及如何修复它吗?

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

   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();

最佳答案

分组是第二项工作的基础。

如果您不想分组,那么我怀疑您正在寻找类似的东西

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();

关于c# - 如何使用 LINQ 将 .Where 添加到 .Select 到对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60680690/

相关文章:

c# - 有没有更快的方法来检查 LINQ to XML 中的 XML 元素?

c# - 下载XML客户端,先从Session中获取数据

C# 类型 _ 没有定义构造函数

c# - EPPlus:如何设置合并单元格的样式?

javascript - Newtonsoft.JsonConvert - 如何将 JavaScript 对象反序列化为一个属性为 Enum 的对象?

visual-studio-2008 - Intellisense 中 LINQ 方法的尖括号是什么意思? (包含<>、计数<>、不同<>等)

javascript - LINQ-For-Javascript 嵌套数组

c# - 从LINQ查询返回匿名类型?

c# - foreach C# 中的字符串列表

c# - Asp.Net MVC 2 创建面包屑