Lambda表达式返回错误

时间:2012-06-05 02:32:24

标签: c# lambda

这是我的代码:

SomeFunction(m => { 
    ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID); 
 })

并返回此错误:

并非所有代码路径都返回System.Func<IEnumerable>

类型的lambda表达式中的值

4 个答案:

答案 0 :(得分:12)

假设您尝试返回该.Where()查询的结果,则需要删除那些括号和分号:

SomeFunction(m => ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID))

如果你把它们放在那里,ViewData[...].Where()将被视为一个语句而不是一个表达式,所以你最终会得到一个不应该返回的lambda,导致错误。

或者如果你坚持把它们放在那里,你需要一个return关键字,这样语句实际上会返回:

SomeFunction(m =>
{
    return ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID);
})

答案 1 :(得分:3)

您可以将lambda的主体写为表达式:

SomeFunction(m => ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID))

或作为陈述:

SomeFunction(m => { 
    return ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID); 
})

答案 2 :(得分:1)

简单地做

SomeFunction(m => ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID));

答案 3 :(得分:0)

关于你的代码库有几个未解决的问题..做一些疯狂的假设我认为这是一个严格的答案:

        SomeFunction(
            (m) =>
            {
                return ViewData["AllEmployees"].Where(
                       (c) => { return (c.LeaderID == m.UserID); });
            });

这就是原因:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace App
{
    public class DataSet
    {
    }

    public class someclass
    {
        public DataSet Where(Func<Person, Boolean> matcher)
        {
            Person anotherone = new Person();
            matcher(anotherone);
            return new DataSet();
        }
    }

    public class Person
    {
        public string LeaderID, UserID;
    }

    class Program
    {
        public static Dictionary<String, someclass> ViewData;

        private static void SomeFunction(Func<Person, DataSet> getDataSet)
        {
            Person thepersonofinterest = new Person();
            DataSet thesetiamusinghere = getDataSet(thepersonofinterest);
        }

    static void Main(string[] args)
    {
        SomeFunction(
            (m) =>
            {
                return ViewData["AllEmployees"].Where(
                       (c) => { return (c.LeaderID == m.UserID); });
            });
    }
    }
}