C# LINQ列表覆盖以前的值,而不是设置新值

C# LINQ列表覆盖以前的值,而不是设置新值,c#,list,linq,C#,List,Linq,我有一个LINQ查询,它输出到列表,它工作正常,除了每次运行时都会更新原始记录,而不是创建新记录。 每次运行此代码时,data.EventID都会更改,因此我希望每个记录都显示在列表中 守则: foreach(var data in vehicleqry) { bool inUK = boundryChecker.IsLongLatInUK((double)data.declatfloat, (double)data.declongfloat); if (inUK == true)

我有一个LINQ查询,它输出到列表,它工作正常,除了每次运行时都会更新原始记录,而不是创建新记录。 每次运行此代码时,data.EventID都会更改,因此我希望每个记录都显示在列表中

守则:

foreach(var data in vehicleqry)
{
 bool inUK = boundryChecker.IsLongLatInUK((double)data.declatfloat, (double)data.declongfloat);
    if (inUK == true)
    {
       var qryevent = (from e in db.events
                       where e.eventID == data.EventID
                       select new
                       {
                            e.eventID,
                            e.sysdatetime,
                            e.vehicleID
                       }).ToList();
    }
{
我还有一个带有EventID的列表,如果我可以使用它来查询列表?

我认为您真正想要的是只运行一个查询,而不是循环。您可以通过使用
Contains
方法来执行此操作:

var vehicleqry = ...;

// Get all of the individual event IDs for entries that are "inUK"
var vehicleEventIds = vehicleqry
    .Where(ve => boundryChecker
        .IsLongLatInUK((double)ve.declatfloat, (double)ve.declongfloat)
    .Select(ve => ve.EventID);

// Get all the matching events
var qryevent = (from e in db.events
               where vehicleEventIds.Contains(e.eventID)
               select new
               {
                    e.eventID,
                    e.sysdatetime,
                    e.vehicleID
               }).ToList();

我认为你真正想要的是只运行一个查询,而不是循环。您可以通过使用
Contains
方法来执行此操作:

var vehicleqry = ...;

// Get all of the individual event IDs for entries that are "inUK"
var vehicleEventIds = vehicleqry
    .Where(ve => boundryChecker
        .IsLongLatInUK((double)ve.declatfloat, (double)ve.declongfloat)
    .Select(ve => ve.EventID);

// Get all the matching events
var qryevent = (from e in db.events
               where vehicleEventIds.Contains(e.eventID)
               select new
               {
                    e.eventID,
                    e.sysdatetime,
                    e.vehicleID
               }).ToList();

你能更好地解释你的问题吗?重置索引[0]值是什么意思重置索引是什么意思?什么是索引[0]?这段代码中不存在。因此,每次运行它时,它都会替换第一条记录,而不是创建一条新记录。只有当数据库中有任何项且它们的
eventID
数据相同时,才能将
qryevent
初始化为列表。你能确认你的数据库中是否有任何数据吗?你试过调试你的代码吗?有数据,它被分配到列表中。它每次只是替换以前的数据,而不是插入新记录。您能更好地解释您的问题吗?重置索引[0]值是什么意思重置索引是什么意思?什么是索引[0]
?这段代码中不存在。因此,每次运行它时,它都会替换第一条记录,而不是创建一条新记录。只有当数据库中有任何项且它们的
eventID
数据相同时,才能将
qryevent
初始化为列表。你能确认你的数据库中是否有任何数据吗?你试过调试你的代码吗?有数据,它被分配到列表中。它每次只是替换以前的数据,而不是插入新记录。糟糕的是,我忘记了一行代码,inUK部分对于过滤EventID很重要。因此,只有当这是真的,我才想将记录添加到列表中。(用代码更新了帖子)真的吗?这就是为什么您首先要写一个好问题,因为我现在已经浪费了编写上述代码的时间。无论如何,这仍然可以通过使用我添加的
Where
子句过滤列表来完成。糟糕的是,我忘记了一行代码,inUK部分对于过滤EventID很重要。因此,只有当这是真的,我才想将记录添加到列表中。(用代码更新了帖子)真的吗?这就是为什么您首先要写一个好问题,因为我现在已经浪费了编写上述代码的时间。无论如何,这仍然可以通过使用我添加的
Where
子句过滤列表来完成。