c# - 以编程方式将行添加到 Linq-to-SQL 数据集

标签 c# asp.net linq linq-to-sql

假设我们为网格生成了这个 link-to-sql 数据集:

var query = from c in customers
                    orderby c.FirstName
                    select c;

Grid1.DataSet = query;
Grid1.DataBind();

生成此数据集后,我们需要以编程方式将“Vince Vaughn”添加到此数据集(目标是向此 linq-to-sql 数据集添加一行,以便从数据库中获取的值,以及第 1 行以编程方式添加,都出现在网格中)。

如何使用 C# 以编程方式完成此操作? (即以编程方式为 Vince Vaughn 添加一行到数据集)

CUSTOMERS TABLE
ID     FirstName    LastName    
1      John         Jones    
2      Sally        Smith

环境:C#.NET 4.0

提前谢谢你。

最佳答案

如果您的意思是实际将行添加到后端存储,并且假设 ID 是标识列并且您的模型配置正确,您可以这样做。

using (var context =  new ...)
{
    context.customers.Add(
        new Customer { FirstName = "Vince", LastName = "Vaughn" });
    context.SubmitChanges();
}

如果您只是想让 Vince 出现在列表中,您可以这样做

var query = customers.Concat(new Customer[]
    { 
        new Customer
            {
                ID = customers.Max(c => c.ID) + 1,
                FirstName = "Vince",
                LastName = "Vaughn"
            }
    }).OrderBy(c => c.FirstName);

这会将 Vince 添加到列表中,但实际上不会将他添加到存储中。


如果您只是想将一个或多个结果“欺骗”到数据库中的一个集合中,您可以连接一组兼容的匿名类型,像这样......

var queryWithVince = query.Select(r = new 
                    { 
                        FirstName = r.FirstName, 
                        LastName = r.LastName
                    })
    .Concat( new []
        {
            new { FirstName = "Vince", LastName = "Vaughn" }
        }
    .OrderBy(p => p.FirstName);

如果它们的成员具有相同的属性名称和类型,则两个匿名类型是兼容的。如果 query 的结果是其他一些非匿名类型,您需要确保 linq 处理能够将这些结果与您的匿名添加相结合。

关于c# - 以编程方式将行添加到 Linq-to-SQL 数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12178570/

相关文章:

c# - DllNotFoundException,但 DLL 存在

c# - 将类型传递给泛型类

c# - 将常量映射到列表填充和查找的资源字符串

c# - 缓存 IEnumerable 与 List 以进行延迟初始化

c# - 如何在C#中改进推送数据管道以使其性能与F#相匹配

c# - 抽象变量/属性? C#

c# - n次求根算法

c# - 如何将signalR实现到通过后端服务连接的两个项目

asp.net - 在 .NET 中使用 CultureInfo 访问资源字符串

c# - 使用 Linq 更新集合中除一个对象之外的所有对象