【问题标题】:Return an empty model when Linq query has no record当 Linq 查询没有记录时返回一个空模型
【发布时间】:2020-08-04 10:55:29
【问题描述】:

请我正在使用Entity Framework 处理ASP.NET MVC 项目,并且在函数中我希望它返回由模型结构化的数据(我使用 LINQ 查询来检索函数将返回的数据 )。 当LINQ 查询有数据时一切都很好,但是当LINQ 查询没有数据时我得到了这个错误:

错误:

序列不包含任何元素

功能:

public static List<ABS_model> SELECT_Related_With_STG_Details(string STG)
{
    var R = (from A in SCHOOL_DB_Context.Con.ABS 
                join S in SCHOOL_DB_Context.Con.STGs on A.STG_ABS equals S.CD_STG
                join U in SCHOOL_DB_Context.Con.UFs on A.UF_ABS equals U.CD_UF
                where A.STG_ABS == STG
                select new ABS_model {
                    N_ABS = A.N_ABS,
                    STG_ABS = A.STG_ABS,
                    NM_STG = S.NM_STG,
                    PRN_STG = S.PRN_STG,
                    DT_ABS = A.DT_ABS,
                    UF_ABS = U.NM_UF,
                    INTTL_UF = U.NM_UF,
                    JSTF_ABS = A.JSTF_ABS,
                    JSTF_DOC_ABS = A.JSTF_DOC_ABS
                }
            ).ToList();
            
    return R;
}

所以如果 Query 没有记录(如果可以的话),我想返回 Null 模型。

所以请帮忙?

【问题讨论】:

  • return R.Any() ? R : null
  • 非常感谢兄弟,这对我有帮助,但我有一个问题如果我在查询的最后一个使用 .Single() 并得到相同的错误,您可以为我建议任何解决方案吗?
  • Enumerable.Single Method :返回序列的单个特定元素。 → 所以它需要一个非空集合
  • 根据您的要求使用.SingleOrDefault().FirstOrDefault()。检查此以获取更多详细信息stackoverflow.com/questions/1745691/…

标签: c# asp.net-mvc entity-framework linq


【解决方案1】:

试试这个,应该可以的:

var R = from A in SCHOOL_DB_Context.Con.ABS
                join S in SCHOOL_DB_Context.Con.STGs
                   on A.STG_ABS equals S.CD_STG
                join U in SCHOOL_DB_Context.Con.UFs
                   on A.UF_ABS equals U.CD_UF
                where A.STG_ABS == STG
                select new ABS_model
                {
                    N_ABS = A.N_ABS,
                    STG_ABS = A.STG_ABS,
                    NM_STG = S.NM_STG,
                    PRN_STG = S.PRN_STG,
                    DT_ABS = A.DT_ABS,
                    UF_ABS = U.NM_UF,
                    INTTL_UF = U.NM_UF,
                    JSTF_ABS = A.JSTF_ABS,
                    JSTF_DOC_ABS = A.JSTF_DOC_ABS
                };
if(R.Any())
{
   return R.ToList();
}
else
{
   return null;
}

【讨论】:

    【解决方案2】:

    正如Priyank Panchal 提到的

    使用:

    var R = (from A in SCHOOL_DB_Context.Con.ABS 
                join S in SCHOOL_DB_Context.Con.STGs on A.STG_ABS equals S.CD_STG
                join U in SCHOOL_DB_Context.Con.UFs on A.UF_ABS equals U.CD_UF
                where A.STG_ABS == STG
                select new ABS_model {
                    N_ABS = A.N_ABS,
                    STG_ABS = A.STG_ABS,
                    NM_STG = S.NM_STG,
                    PRN_STG = S.PRN_STG,
                    DT_ABS = A.DT_ABS,
                    UF_ABS = U.NM_UF,
                    INTTL_UF = U.NM_UF,
                    JSTF_ABS = A.JSTF_ABS,
                    JSTF_DOC_ABS = A.JSTF_DOC_ABS
                }
            ).ToList();
    
    return R.Any() ? R : null
    

    【讨论】:

    • 无法编译,请补充缺少的;
    • 如果您复制粘贴您的代码,您将收到以下错误:“CS1002 ; 预期”
    猜你喜欢
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2012-01-02
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多