我使用的是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‘不包含“Where”和“无可访问扩展方法”的定义,其中可以找到“接受'LogStart’类型的第一个参数”(您是缺少使用指令还是程序集引用?)(CS1061) (宇宙)
有没有人有任何想法,什么可能是错误的,它可以如何修复?
用于引用,同一文件中的以下语句工作正常:
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();发布于 2020-03-14 08:03:34
分组是第二个工作的原因。
如果你不想分组的话,我怀疑你是在找
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();发布于 2020-03-14 07:36:33
事情越简单越好。.Where是一种扩展方法。检查使用语句-除非您使用正确的命名空间(iirc System.Linq),否则您将无法获得该方法。
显然,Start必须是LINQ支持的类型。
https://stackoverflow.com/questions/60680690
复制相似问题