Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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#与多个表左连接_C#_Linq_Left Join - Fatal编程技术网

c#与多个表左连接

c#与多个表左连接,c#,linq,left-join,C#,Linq,Left Join,我有两张桌子 表A(CODART和DES两个字段) 表B(CODART和PREVEN两个字段) 我需要使用2个表进行左连接,并返回json。表B没有记录时,我得到这个错误 ((转换为值类型'System.Decimal'失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为null的类型。)) 我使用这个代码 var lstart = (from art in db.tableA where art.CODART == '

我有两张桌子

表A(CODART和DES两个字段) 表B(CODART和PREVEN两个字段)

我需要使用2个表进行左连接,并返回json。表B没有记录时,我得到这个错误

((转换为值类型'System.Decimal'失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为null的类型。))

我使用这个代码

        var lstart = (from art in db.tableA
                      where art.CODART == 'uno'
                      join tfa in db.tableB on art.CODART equals tfa.CODART into ArtTfa from AA in ArtTfa.DefaultIfEmpty()
                      select new 
                      {
                          art.CODART,
                          art.DES,
                          AA.PREVEN
                      });

        return Json(new { lista = lstart }, JsonRequestBehavior.AllowGet);
        var lstart = (from art in db.tableA
                      where art.CODART == 'uno'
                      join tfa in db.tableB on art.CODART equals tfa.CODART into ArtTfa from AA in ArtTfa.DefaultIfEmpty()
                      select new 
                      {
                          art.CODART,
                          art.DES,
                          (Decimal?)AA.PREVEN
                      });

        return Json(new { lista = lstart }, JsonRequestBehavior.AllowGet);
你知道为什么吗?
谢谢。

对不起,我的问题。我找到了解决办法

是否需要在字段前使用(十进制?)对字段进行强制转换

这个新代码

        var lstart = (from art in db.tableA
                      where art.CODART == 'uno'
                      join tfa in db.tableB on art.CODART equals tfa.CODART into ArtTfa from AA in ArtTfa.DefaultIfEmpty()
                      select new 
                      {
                          art.CODART,
                          art.DES,
                          AA.PREVEN
                      });

        return Json(new { lista = lstart }, JsonRequestBehavior.AllowGet);
        var lstart = (from art in db.tableA
                      where art.CODART == 'uno'
                      join tfa in db.tableB on art.CODART equals tfa.CODART into ArtTfa from AA in ArtTfa.DefaultIfEmpty()
                      select new 
                      {
                          art.CODART,
                          art.DES,
                          (Decimal?)AA.PREVEN
                      });

        return Json(new { lista = lstart }, JsonRequestBehavior.AllowGet);

非常感谢。

试试System.Decimal?:问号允许像int一样的null?谢谢,jdweng。你是对的。我以前没见过。