4

これは何度も尋ねられることを知っており、ほとんどのソリューションをオンラインで検索しましたが、何もうまくいかないようです。この構造のテーブルがあります:

ID | ScheduleId | Filename | Description
 1 |     10     |          |  ....
 2 |     10     | test.txt |  .....

FilenameScheduleId を渡して最後の空でないものを取得したい(たとえば、この場合は "test.txt" を取得する)。

私は多くのことを試しましたが、ファイル名が得られないようです。これが最後のものです:

var tempFileName = objContext.SchedulesAndFiles
                           .Where(x => x.ScheduleId == scheduleId)
                           .OrderByDescending(x => x.ScheduleId)
                           .Take(1).Select(x => x.Filename);

これもうまくいきませんが、うまくいかない理由は理解しています:

var tempFileName = from e in objContext.SchedulesAndFiles
                   where e.ScheduleId == scheduleId 
                   orderby e.ScheduleId descending
                   select e.Filename;

例外の呼び出し.Last()または.LastOrDefault()スロー( The query operator 'LastOrDefault' is not supported.)

4

5 に答える 5

3

1 つのオプションは、LastOrDefault() を使用する前に ToList() または AsEnumerable() を呼び出すことです。

var tempFileName = objContext.SchedulesAndFiles
                   .Where(x => x.ScheduleId == scheduleId 
                            && x.Filename != null && x.Filename != '')
                   .ToList().LastOrDefault();
if(tempFileName != null)
{
    // Do something
}
于 2014-07-01T09:31:05.730 に答える
0

最後の試み:

var tempFileName = objContext.SchedulesAndFiles
                         .Where(x 
                             => x.ScheduleId == scheduleId 
                             && x.Filename != null 
                             && x.Filename != "")
                         .OrderByDescending(x => x.ID)
                         .First()
                         .Select(x => x.Filename);

この scheduleId を持つすべてのアイテムについて、空でない fileName を持つすべてのアイテムを取得し、ID の降順で並べ替え (より高い ID がより低い ID の後に挿入されると仮定)、First() を取得し (サポートされている必要があります)、取得します。そのファイル名。

満足のいく fileName がない場合、 NullPointerExceptionon に遭遇する可能性があることに注意してください。First()

また、スペース/タブなどを見つけないように、正規化/トリムが必要になる場合があります。

于 2014-07-01T09:32:15.910 に答える