在 LINQ to SQL 中查找或创建对象的通用方法?

2024-01-15

很多时候在我的LINQ 到 SQL http://en.wikipedia.org/wiki/Language_Integrated_Query#LINQ_to_SQL_.28formerly_called_DLINQ.29代码中,我需要“查找或创建”一个实体,如下所示:

var invoiceDb = ctx.Invoices.FirstOrDefault(a => a.InvoicerId == InvoicerId &&
                                                 a.Number == invoiceNumber);
if (invoiceDb == null)
{
    invoiceDb = new Invoice();
    invoiceDb.Number = invoiceNumber;
    ctx.Invoices.InsertOnSubmit(invoiceDb);
}

我希望使其成为一种通用方法......有什么好的想法吗?


我想出了这些似乎对我很有效的扩展方法。

    public static T FindOrCreate<T>(this Table<T> table, Func<T, bool> find, Action<T> create) where T : class, new()
    {
        T val = table.FirstOrDefault(find);
        if (val == null)
        {
            val = new T();
            create(val);
            table.InsertOnSubmit(val);
        }
        return val;
    }

    public static T FindOrCreate<T>(this Table<T> table, Func<T, bool> find) where T : class, new()
    {
        return FindOrCreate(table, find, a => { });
    }

它的用法如下:

    var invoiceDb = ctx.Invoices.FindOrCreate(a => a.InvoicerId == InvoicerId &&
                                                     a.Number == invoiceNumber);
    invoiceDb.Number = invoiceNumber;

Or

    var invoiceDb = ctx.Invoices.FindOrCreate(a => a.InvoicerId == InvoicerId &&
                                                     a.Number == invoiceNumber,
                                              a => a.Number = invoiceNumber);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 LINQ to SQL 中查找或创建对象的通用方法? 的相关文章

  • 以 ISO 8601 格式输出日期

    如何在 C 中获取以下格式的日期 2016 04 26T19 50 48Z include
  • MVC。网络错误:初始化字符串的格式不符合从索引 0 开始的规范

    我的连接字符串是
  • 求 a 范围内的 pow(a^b)modN

    对于给定的b and N以及一系列a say 0 n 我需要找到ans 0 n 1 where ans i 没有a s为此pow a b modN i 我在这里搜索的是可能的重复pow a b modN对于一系列a 以减少计算时间 例子 i
  • 获取当前用户的 NetworkCredential (C#)

    我正在尝试从控制台应用程序调用 Web 服务 并且我需要向客户端提供System Net NetworkCredential object 是否有可能创建一个NetworkCredential启动应用程序的用户的对象而不提示输入用户名 密码
  • gets 和 scanf 有什么区别?

    如果代码是 scanf s n message vs gets message 有什么区别 似乎两者都获取消息的输入 基本区别 参考您的特定场景 scanf 遇到一个时结束接受输入whitespace newline or EOF gets
  • OWIN AuthenticationOptions 在 mvc5 应用程序中运行时更新

    Hi 情况如下 我在 iis 7 上有一个带有 Identity 2 的 MVC 5 应用程序 该应用程序为多个网站提供服务 主机名是某些网站的关键 网站 另一个网站 等等 我决定在我的所有网站上使用谷歌外部登录 每个网站都应该是带有个人
  • 以编程方式更改 Excel 中的字体(Trebuchet MS、Calibari)C#

    我目前正在使用一个 C 应用程序 该应用程序有一个将生成 Excel 文件的类 一切都很顺利 Excel 工作表上填充的数据具有 Times New Roman 字体 我想将其更改为其他字体 Calibari 我怎样才能以编程方式做到这一点
  • 在异步方法中使用时 HttpClient 标头被清空

    我正在使用 NET Framework 4 6 1 我的 Web api 中有一个控制器 其中有静态 HttpClient 来处理所有 http 请求 在 IIS 上托管我的应用程序后 大约每月一次 我的应用程序的所有传入请求都会出现以下异
  • 在 C/C++ 中绘制填充椭圆的简单算法

    在SO上 找到了以下绘制实心圆的简单算法 for int y radius y lt radius y for int x radius x lt radius x if x x y y lt radius radius setpixel
  • 命令中带空格的 Windows C 系统调用

    我无法使用名称和参数中的空格进行系统调用 例如 system c program files something example exe c my files example txt 我尝试过各种我知道的方法来逃避 但没有任何效果 我努力了
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • UWP - 绑定枚举差异

    我遇到了一个非常有趣的问题 假设 UWP 应用中有以下 XAML 页面内容
  • 嘲笑会员用户

    我目前正在开发一个 asp net mvc 2 应用程序 它使用默认的 SqlMembershipProvider 进行身份验证 我已经实现了一个控制器方法 通过调用读取当前用户的 ProviderUserKeyMembership Get
  • 如何在 Windows 8.1 上打开多个 Visual Studio 窗口? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我使用的是 Windows 7 我能够启动多个 Visual Studio 并同时工作 现在我有 Windows 8 1 操作系统 每当我
  • Subsonic 3 ActiveRecord 嵌套选择导致 NotIn 错误?

    我有以下 Subsonic 3 0 查询 其中包含嵌套的 NotIn 查询 public List
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 64 位随机生成器种子

    我目前正在运行一个具有 8 个以上管道 线程 的多线程模拟应用程序 这些管道运行非常复杂的代码 该代码取决于种子生成的随机序列 然后该序列被归结为单个 0 1 我希望在将种子从主线程传递到处理管道后 这种 随机处理 具有 100 的确定性
  • 从不同的线程访问对象

    我有一个服务器类 它基本上等待来自客户端的连接 在该类中 我创建了一个 NetworkStream 对象 以便能够从客户端接收字节 由于 NetworkStream Read 方法不是异步的 这意味着它将等到从客户端读取字节才能继续执行类似
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐

  • iOS Storyboards/NIB 底层剖析。它们是如何实施的?

    我开始对 iOS 中的 NIB Storyboards 机制的底层细节感兴趣 我想更多地了解它们的实现 我对开发自己的机制感兴趣 我找到了一些关于NIB 文件 https developer apple com library mac do
  • psutil 已满足要求

    我正在尝试使用命令 pip install psutil 安装 lib psutil 当我运行这段代码时 我得到了这个 Requirement already satisfied psutil in opt conda lib python
  • Heroku 将数据库从一个应用程序传输到另一个应用程序

    我需要将数据库从 app 1 传输到 app 2 我在 app 1 上创建了备份 然后跑 heroku pg 备份恢复 HEROKU POSTGRESQL COLOR app app 2heroku pgbackups url app ap
  • Django 收到意外的关键字参数“id”

    我正在尝试在 Django 中创建电话簿 我的网址 py urlpatterns url r views people list name people list url r P
  • std::string_view 到底比 const std::string& 快多少?

    std string view http en cppreference com w cpp string basic string view已经发展到 C 17 并被广泛推荐使用它来代替const std string 原因之一是性能 有
  • 快速标签仅留下边框

    一起早上好 i have a tableview like this 例子 在第一单元格中 我的右侧有一个红色文本标签 从它的左边我包括一个像灰线一样的图像 使用此代码我可以设置完整的绿色边框 cell Label layer border
  • 一起工作时间最长的一对员工——Python/Pandas

    我最近必须编写一个代码 返回在一个共同项目上合作最多的一对员工 这是我想出的代码 注1 Null 被程序读取为 今天 注 2 数据来自以下形式的 txt 文件 EmpID ProjectID DateFrom DateTo 1 101 20
  • 使用 Mongo-Hadoop 连接器通过 Apache Spark 更新 MongoDb 中的集合

    我想通过 Java 中的 Spark 更新 MongoDb 中的特定集合 我正在使用用于 Hadoop 的 MongoDB 连接器 https github com mongodb mongo hadoop检索并保存信息阿帕奇火花 http
  • git rebase 合并冲突

    我分叉了一个 github 存储库并在我的 github 存储库上工作 我已经提出了拉取请求并且已经完成 之后上游又有了一些提交 所以现在我想重新设置基准 我想这就是我必须做的 但我遇到了这些合并冲突 First rewinding hea
  • PostgreSQL 用户列表

    我想获取 psql 中某个数据库的用户列表 例如 template0 用户是谁 或者对于 template1 数据库 那里的用户是谁 已经尝试过 du no database is Listed not Users Select from
  • 不同环境的实体框架数据迁移

    有一些特定于开发 测试 生产环境的基础数据 我们现在在所有环境中使用实体框架迁移 但不知道如何以指定仅在开发 测试 生产上执行的迁移的方式为特定环境指定迁移 这可以在 Fluent Migrator 中使用标签属性来完成 但是实体框架呢 当
  • 如何在 Angular 2 应用程序中添加 reCAPTCHA?

    如何将 reCAPTCHA 集成到 Angular 2 应用程序中 假设您有 reCAPTCHA 给出的站点密钥和客户端密钥 将以下代码放入组件中 ViewChild captchaRef2 captchaRef2 ElementRef p
  • 操作栏中的最后一个选项卡被裁剪,消失在屏幕上

    我正在制作一个使用标签进行导航的 Android 应用程序 我在操作栏中最后一个选项卡的渲染时遇到问题 它会离开屏幕并被裁剪 据我所知 只要选项卡数量太大而无法适应屏幕宽度 就会发生这种情况 我正在使用ActionBar NAVIGATIO
  • 通过可观察限制重播缓冲区

    我有一个包含实时数据的流 以及一个基本上分隔属于一起的实时数据部分的流 现在 当有人订阅实时数据流时 我想向他们重播实时数据 但是 我不想记住所有实时数据 只想记住自上次其他流发出值以来的部分数据 有一个问题 https rx codepl
  • Play Framework 自定义资源:如何复制到目标?

    我有一个 csv 文件 必须在应用程序启动时读取该文件 我如何才能将此文件复制到目标 以 运行 或 启动 它 我正在尝试使用全局级访问此文件Global class getResourceAsStream file csv 但结果始终为空
  • 仅当使用 Web 邮件客户端时,Mailto 链接才会在新选项卡中打开

    我有一个网页 可创建联系人及其电子邮件地址列表 对于 mailto 链接 您有两个选项 1 在当前窗口中打开它或 2 在新选项卡 窗口中打开它 我看到双方都存在潜在的缺点 对于网络邮件客户端 例如 gmail 选项 1 并不理想 因为它会劫
  • 您可以在其中放置图表的 Microsoft Office 剪贴板格式有哪些?

    我正在尝试在内存中创建一个可以提供拖放操作的 DOCX 我首先尝试了 嵌入源 然而 虽然它看起来很完美 OLE 包装器中的 DOCX 但 Word 并不使用它进行拖放 尽管它 确实使用它进行剪切和粘贴 有没有办法强制Word Excel P
  • 使用 Iperf 进行 haproxy 的 udp 流量

    我正在使用 Docker 容器开展我的个人项目 关于 Haproxy 的 性能评估 我正在使用 Python 进行编程 并使用 iperf 来生成流量 我创建了几个 Docker 容器作为客户端和服务器 客户端应该通过充当负载均衡器的 Ha
  • QML 将纹理应用于网格

    我正在尝试将图像纹理应用到 QML Qt 5 6 2 中的网格 我从示例 Shadow Map QML 开始 我想对 GroundPlane 进行纹理处理 材质和效果 qml 类应用于该 GroundPlane 网格 但我看不到如何应用图像
  • 在 LINQ to SQL 中查找或创建对象的通用方法?

    很多时候在我的LINQ 到 SQL http en wikipedia org wiki Language Integrated Query LINQ to SQL 28formerly called DLINQ 29代码中 我需要 查找或