4

这是我的代码:

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

它返回此错误:

并非所有代码路径都返回类型为 lambda 表达式的值System.Func<IEnumerable>

4

4 回答 4

13

假设您正在尝试返回该.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);
})
于 2012-06-05T02:34:25.087 回答
4

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

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

或作为声明:

SomeFunction(m => { 
    return ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID); 
})
于 2012-06-05T02:37:33.343 回答
1

简单地做

SomeFunction(m => ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID));
于 2012-06-05T02:35:11.333 回答
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); });
            });
    }
    }
}
于 2012-06-12T18:03:27.017 回答