4

こんな構造をしています。

 public class ExportStructure
    {
        public string issueid { get; set; }
        public string filename {get;set;}
        public bool export { get; set; }
    }
public class ExportStructureManager
    {
        public List<ExportStructure> ExportIntoStructure { get; set; }
        public ExportStructureManager()
        {
            this.ExportIntoStructure = new List<ExportStructure>();
        }
        public ExportStructure AddToStructure(string issueid,string filename,bool exportornot)
        {
            ExportStructure expstr = new ExportStructure();
            expstr.issueid = issueid;
            expstr.filename = filename;
            expstr.export = exportornot;

            this.ExportIntoStructure.Add(expstr);
            return (expstr);
        }
        public bool GetStatusFromStructure(string issuekey)
        {
          return (from p in ExportIntoStructure
                where p.issueid == issuekey
                select p.export));
        }
    }

上記のものから、プロパティのステータスGetStatusFromStructureを返すように実行したいと思います。exportそのために私はそのように書きました。しかし、それは次のようにエラーを出しています

タイプ 'System.Collections.Generic.IEnumerable' を 'bool' に暗黙的に変換することはできません

これを解決するにはselect p.export

4

4 に答える 4

12

問題は、クエリが一連bool値を取得することです-フィルターに一致するレコードごとに1つです。おそらく、単一の結果しか期待していないので、次を使用できますSingle

return (from p in ExportIntoStructure
        // I assume you meant == rather than =
        where p.issueid == issuekey
        select p.export).Single();

ただし、複数の結果がある場合、またはまったく結果がない場合にどうしたいかについても考慮する必要があります。オプションは次のとおりです。

  • Single
  • SingleOrDefault
  • First
  • FirstOrDefault
  • Last
  • LastOrDefault

どちらが適切かは、それらの状況での動作をどうしたいかによって異なります。

これを非クエリ式にすることを検討することもできます。

return ExportIntoStructure.Where(p => p.issueid == issuekey)
                          .Select(p => p.export)
                          .Single();

または、最初に単一のオブジェクトに一致させてから、次のように投影します。

return ExportIntoStructure.Single(p => p.issueid == issuekey)
                          .export;
于 2012-08-03T11:33:25.727 に答える
1

ステートメントの変更

return (from p in ExportIntoStructure
            where p.issueid = issuekey
            select p.export));

return (from p in ExportIntoStructure
            where p.issueid == issuekey
            select p.export)).Single();

しかし、 issuekey が存在することを確認してください。そうしないと、例外がスローされます。またはそのデフォルトを試してください。

return (from p in ExportIntoStructure
            where p.issueid == issuekey
            select p.export)).SingleOrDefault();
于 2012-08-03T11:33:26.693 に答える
0

関数を次のように変更します。

    public bool GetStatusFromStructure(string issuekey) 
    { 
        return (from p in ExportIntoStructure 
                where p.issueid = issuekey 
                select p.export).FirstOrDefault()); 
    } 

ただし、一致しない場合はブール値のデフォルト、つまり false になることに注意してください。

于 2012-08-03T11:36:55.630 に答える
0

thw クエリの最後に FirstOrDefault 匿名メソッドを追加します。

return (from p in ExportIntoStructure
            where p.issueid = issuekey
            select p.export)).FirstOrDefault();

FirstOrDefault (または SinlgeOrDefault()) 匿名メソッドは、結果がない場合に有効です。onoy First または Single を使用する場合は null を返します。値がない場合は、エラーがスローされます。

于 2012-08-03T11:35:11.027 に答える