我之前从未见过这个错误,而且非常令人困惑,我基本上都在尝试做一些我说找到我所有位置(只返回一个)的东西,它与传入的位置名称和类型匹配:
string name = columns[40];
Location type = db.Locations.Where(l => l.name == name).FirstOrDefault();
Location loc = db.Locations.Where(l => l.name == name && l.type == type.type).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
可能有一种更好的方法可以一举做到我想要的东西,但基本上我从列中获取名称(这来自csv文件),然后说,给我那些位置信息.在此之后,我说现在我已经拥有了所有的爵士乐,请给我一个这个名字及其类型的位置.
但我得到错误:
非静态方法需要目标
所有这些代码运行的顶级方法是:
static void Main(string[] args){}
Run Code Online (Sandbox Code Playgroud)
基本上它只是一个控制台应用程序.发生什么了?
堆栈跟踪中的完整错误消息: {"非静态方法需要目标."}
注意:作为"可能的答案"发布的问题在这种情况下没有帮助,因为我运行此代码的主要方法是静态的.
经过进一步调查,我发现名称和类型为null,因此我做了以下修复:
if (name != null)
{
Location type = db.Locations.Where(l => l.name == name).FirstOrDefault();
Location loc = db.Locations.Where(l => l.name == name && l.type == type.type).FirstOrDefault();
locationNearbyId = loc.id;
// More code
}
Run Code Online (Sandbox Code Playgroud)
唉,我仍然得到错误: Location loc = db.Locations.Where(l => l.name == name && l.type == type.type).FirstOrDefault();
Der*_*ean 22
我今天发生了这件事.来发现,我这样做:
Player player = db.Players
.Where(p => p.ClubID == course.Club.ID && p.IsActive == true && p.Phone != null)
.ToArray()
.SingleOrDefault(p => p.Phone.FormatPhoneNumber() == phone);
Run Code Online (Sandbox Code Playgroud)
这里course.Club
是懒惰加载通过EF从我的数据库.起初,我认为我的问题是FormatPhoneNumber
扩展,但后来发现删除course.Club.ID
修复问题:
int clubID = course.Club.ID;
Player player = db.Players
.Where(p => p.ClubID == clubID && p.IsActive == true && p.Phone != null)
.ToArray()
.SingleOrDefault(p => p.Phone.FormatPhoneNumber() == phone);
Run Code Online (Sandbox Code Playgroud)
因此,避免在后续LINQ查询中使用从延迟加载的对象中收集的值 - 将它们分配给局部变量,然后在查询中使用这些变量.
归档时间: |
|
查看次数: |
19453 次 |
最近记录: |