微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何存储然后执行 linq2db 查询?

如何解决如何存储然后执行 linq2db 查询?

我对 C# 很陌生。在其他语言中,我习惯于以“准备,然后使用所需参数执行语句”的方式使用 DB,因此我可以将准备好的查询传递给函数并执行所有此类操作。 现在我正在尝试解决这个任务:在不同的上下文中从不同的数据库中获得几乎相同的结果集。就像您有包含文件元数据的“文件”表一样,在一个数据库中它确实有“file_priority”字段,而在其他数据库中它确实有“file_description”字段等等,但大多数字段都是通用的,处理逻辑几乎相同。

所以我想在外部代码中准备查询并将其与所需的参数值一起传递给数据处理函数(或类)。

我找不到任何执行(将参数值传递给查询)linq2db 查询的示例。

==========UPD============

好的,举个例子。让我们谈谈 Perl。

package main1;
use FileProcessor;

my $sth = $dbh->prepare(qq[ SELECT name,extension,file_priority FROM files WHERE file_id = ? ]);

my $processor = new FileProcessor(query => $sth);
my $file_id = $ENV{file_id};
my $file_data = $processor->get_file(id => $file_id);

package main2;
use FileProcessor;

my $sth = $dbh->prepare(qq[ SELECT name,file_description FROM files WHERE file_id = ? ]); # preparing query

my $processor = new FileProcessor(query => $sth);
my $file_id = $ENV{file_id};
my $file_data = $processor->get_file(id => $file_id);

package FileProcessor;

sub new {
    my $class = shift;
    my $self = {@_};
    bless $self,$class;
}

sub get_file {
    my $self = shift;
    my %params = @_;
    $self->{query}->execute($params{$file_id}); #passing params to query
    my $file_data = $self->{query}->fetchrow_hashref; # fetching result from DB
# do something with file data
# ...
    return $file_data;
}

解决方法

linq2db 不会给你准备步骤。但是你可以通过很多扩展来运行原始查询:

db.Query<File>("SELECT name,extension,file_priority FROM files WHERE file_id = @fileid",new DataPamater("@fileid",id));
db.Query<File>("SELECT name,new { fileid = id });

linq2db 以这种方式执行此操作并不常见,因为它支持 LINQ 查询并且会自动创建参数:

var id = 1;
var query = 
   from f in db.GetTable<File>()
   where f.file_id = id
   select new File
   {
      name = f.name,extension = f.extension,file_priority = f.file_priority
   };

var file = query.FirstOrDefault();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。