将Linq中的行检索到ID为动态的SQL

时间:2012-04-04 14:55:00

标签: c# sql linq

我有以下代码:

var db = new IpsDBDataContext(connectionString);

var record = new IpsJobQueue();

var config = new IpsJobFileConfig();

record.FileName = file.Name;
record.FileNameConventionID = ....?
record.PickupDate = DateTime.Now;

// hard coded to follow suit with "unprocessed" flag in 
// IpsJobProcessCodes table.
record.ProcessStatus = 1; 
record.CreationTime = file.CreationTime;

record.StartTime = null;
record.EndTime = null;

db.IpsJobQueues.InsertOnSubmit(record);

db.SubmitChanges();

我关注的一句话是record.FilenameConventionID = ...?

在这里,我需要在FileNameConventionID表中将ID分配给IpsJobFileConfig(作为外键),其中PublisherName列=“未确定”。这很容易做,但问题是与此记录类型(未确定)相关联的ID可能会随着它被提升为生产而改变。

所以我认为我需要做的事情将分两步进行。

  1. 查找PublisherName = Undetermined
  2. 的记录
  3. 获取该记录的ID(因为它将是动态的)。
  4. 问题是:如何从我选择的记录栏中反复获取ID?

2 个答案:

答案 0 :(得分:2)

现在你正在创建一个新的IpsJobFileConfig记录,但没有使用它。我猜你可以完全摆脱它。

你应该能够逃脱(假设IpsJobFileConfig表中的任何记录都有正确的发布者名称,因为可能有多行):

var config = db.IpsJobFileConfigs.First(c => c.PublisherName == "Undetermined");
record.FileNameConventionID = config.Id;

答案 1 :(得分:1)

您有一个JobQueue实例和一个以前存在的相关JobFileConfig实例。

您应该从数据库加载JobFileConfig,如下所示:

JobFileConfig config = db.JobFileConfig.Where(c => c.PublisherName == "Undetermined").FirstOrDefault();

然后你应该将新实例附加到对象图中,如下所示:

config.JobQueues.Add(myJobQueue);

不要分配ID。不要InsertOnSubmit新的JobQueue实例。它连接到对象图,当您调用SubmitChanges()时,DataContext将管理其余部分。它会将新实例保存到数据库中,并将任何ID填充回您的实例。


PS:DataContext实现了IDispoable,所以你应该using它。

using(IpsDBDataContext db = new IpsDBDataContext(connectionString))
{
  ...
}