Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Simple.Data中使用sql函数(coalesce或isnull)_C#_.net_Sql_Simple.data - Fatal编程技术网

C# 如何在Simple.Data中使用sql函数(coalesce或isnull)

C# 如何在Simple.Data中使用sql函数(coalesce或isnull),c#,.net,sql,simple.data,C#,.net,Sql,Simple.data,我正在将sql查询移植到Simple.Data,原始查询类似于: select a.Field1, a.Field2, b.Field1 from TableA a join TableB b ON a.KeyField = b.KeyField where coalesce(b.SomeDate, '1/1/1900') <= getdate() 有没有关于如何在那里获得联合行为的想法?我尝试过使用??操作符,但没有效果 提前谢谢 我以前从未使用过Simple.Data,但我认为您希望

我正在将sql查询移植到Simple.Data,原始查询类似于:

select a.Field1, a.Field2, b.Field1
from TableA a
join TableB b ON a.KeyField = b.KeyField
where coalesce(b.SomeDate, '1/1/1900') <= getdate()
有没有关于如何在那里获得联合行为的想法?我尝试过使用
??
操作符,但没有效果


提前谢谢

我以前从未使用过
Simple.Data
,但我认为您希望这样做:

var currentDate = DateTime.Now;
var nullDate = new DateTime(1900, 1, 1);
var result = db.TableA.Query()
    .Join(db.TableB).On(db.TableA.KeyField == db.TableB.KeyField &&
        ((!Object.ReferenceEquals(null, db.TableB.SomeDate) ? db.TableB.SomeDate : nullDate) <= currentDate)
    .Select(db.TableA.Field1, db.TableA.Field2, db.TableB.Field1);

聚结在这里是毫无用处的

where coalesce(b.SomeDate, '1/1/1900') <= getdate()

where coalesce(b.SomeDate,'1/1/1900')当有一个SQL函数将列名作为其第一个参数时,可以将其指定为列上的方法:

var currentDate = DateTime.Now;
var defaultDate = new DateTime(1900,1,1);
var result = db.TableA.Query()
    .Join(db.TableB).On(db.TableA.KeyField == db.TableB.KeyField &&
        db.TableB.SomeDate.Coalesce(defaultDate) <= currentDate)
    .Select(db.TableA.Field1, db.TableA.Field2, db.TableB.Field1);
var currentDate=DateTime.Now;
var defaultDate=新日期时间(1900,1,1);
var result=db.TableA.Query()
.Join(db.TableB).On(db.TableA.KeyField==db.TableB.KeyField&&

db.TableB.SomeDate.Coalesce(defaultDate)Hi-Cory.Simple.Data是一种使用动态类型的ORM,因此以
db.TableA
开头的代码没有任何编译时强制,而是由Simple.Data API解释,以便将c#内容转换为SQL。因此,如果我使用的是“直接c#”,您的任何一个解决方案都可以。有关Simple.Data@EricP的更多信息:我做了一些研究并更新了答案。在引擎盖下面,
动态对象仍然只是对象。您应该能够将它们与
空值
进行比较。请参见上文。嗨,山姆,您的策略在这种情况下有效,尽管它仍然无法解决底层问题如何从simple.data使用sql函数的问题。有没有办法授予部分学分p@MarkRendle不幸的是,如何将cast函数用于eg.cast(col_abc为整数)@PavanJaju是不可能的。我将研究v2的cast函数。
db.TableB.SomeDate.GetValueOrDefault(nullDate) <= currentDate
where coalesce(b.SomeDate, '1/1/1900') <= getdate()
where (b.SomeDate is null) or (b.SomeDate <= getdate())
var currentDate = DateTime.Now;
var defaultDate = new DateTime(1900,1,1);
var result = db.TableA.Query()
    .Join(db.TableB).On(db.TableA.KeyField == db.TableB.KeyField &&
        db.TableB.SomeDate.Coalesce(defaultDate) <= currentDate)
    .Select(db.TableA.Field1, db.TableA.Field2, db.TableB.Field1);
var currentDate = DateTime.Now;
var defaultDate = new DateTime(1900,1,1);
var result = db.TableA
    .Query(db.TableA.TableB.SomeDate.Coalesce(defaultDate) <= currentDate)
    .Select(db.TableA.Field1, db.TableA.Field2, db.TableB.Field1);