4

これは私のコードです:

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

そしてそれはこのエラーを返します:

すべてのコードパスがタイプのラムダ式で値を返すわけではありませんSystem.Func<IEnumerable>

4

4 に答える 4

13

そのクエリの結果を返そうとしていると仮定すると、.Where()それらの中括弧とそのセミコロンを削除する必要があります。

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

それらをそこに置くViewData[...].Where()と、式ではなくステートメントとして扱われるため、ラムダが想定どおりに返されないことになり、エラーが発生します。

または、それらをそこに配置することを主張する場合はreturn、ステートメントが実際に返されるようにキーワードが必要です。

SomeFunction(m =>
{
    return ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID);
})
于 2012-06-05T02:34:25.087 に答える
4

ラムダの本体を式として記述することができます。

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 に答える