これは私のコードです:
SomeFunction(m => {
ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID);
})
そしてそれはこのエラーを返します:
すべてのコードパスがタイプのラムダ式で値を返すわけではありませんSystem.Func<IEnumerable>
そのクエリの結果を返そうとしていると仮定すると、.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);
})
ラムダの本体を式として記述することができます。
SomeFunction(m => ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID))
またはステートメントとして:
SomeFunction(m => {
return ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID);
})
単に行う
SomeFunction(m => ViewData["AllEmployees"].Where(c => c.LeaderID == m.UserID));
あなたのコードベースについて未解決の質問がいくつかあります..ワイルドな仮定を行うと、これが正しい答えだと思います:
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); });
});
}
}
}