Linq中的EnumerateFiles

时间:2016-01-02 09:39:09

标签: c# asp.net-mvc linq

我有LINQ to Entities does not recognize the method 'System.Collections.Generic.IEnumerable 1 [System.String] EnumerateFiles(System.String)'方法,并且此方法无法转换为商店表达式。错误。我需要从文件夹获取图像链接,我从数据库中获取ID。

        // Collect flat items and add in List<>
        var nearestItems = from item in _db.Flats
                           select new listItem()
                           {
                               Price = item.Price,
                               Address = item.Address,
                               Bathroom = item.Bathroom,
                               BesprovodnoiInternet = item.BesprovodnoiInternet,
                               City = item.City,
                               FloorAll = item.FloorAll,
                               FloorCurrent = item.FloorCurrent,
                               Funiture = item.Funiture,
                               Kondicioner = item.Kondicioner,
                               PartyFree = item.PartyFree,
                               RoomQuantity = item.RoomQuantity,
                               TipArendy = item.TipArendy,
                               TV = item.TV,
                               ImagesString = Directory.EnumerateFiles(Server.MapPath("~/Content/Prop/" + item.FlatID + "/"))
                                               .Select(fn => "~/Content/Prop/" + item.FlatID + "/" + Path.GetFileName(fn)).ToList()
                           };

是否修复了此代码或备用代码?

2 个答案:

答案 0 :(得分:1)

您的LINQ查询应转换为SQL查询以在SQL Server上运行。很明显,引擎无法将Directory.EnumerateFiles转换为SQL查询。 您可以将新属性FlatId添加到listItem并尝试此操作:

// Collect flat items and add in List<>
var nearestItems = (from item in _db.Flats
                       select new listItem()
                       {
                           Price = item.Price,
                           Address = item.Address,
                           Bathroom = item.Bathroom,
                           BesprovodnoiInternet = item.BesprovodnoiInternet,
                           City = item.City,
                           FloorAll = item.FloorAll,
                           FloorCurrent = item.FloorCurrent,
                           Funiture = item.Funiture,
                           Kondicioner = item.Kondicioner,
                           PartyFree = item.PartyFree,
                           RoomQuantity = item.RoomQuantity,
                           TipArendy = item.TipArendy,
                           TV = item.TV,
                           FlatId = item.FlatID,
                       }).ToList();
foreach(var item in nearestItems)
{
    item.ImagesString = Directory.EnumerateFiles(Server.MapPath("~/Content/Prop/" + item.FlatId + "/"))
     .Select(fn => "~/Content/Prop/" + item.FlatId + "/" + Path.GetFileName(fn)).ToList();
}

答案 1 :(得分:0)

EntityFramework将根据您将在数据库中执行的LINQ构建查询。因此在使用LINQ to Entity时会有一些限制。 EF如何将此代码转换为数据库查询? Directory.EnumerateFiles

没有办法。

因此,您必须只选择必需的属性,然后根据需要在.net:

中进行更改
var nearestItems = (from item in _db.Flats
                       select new listItem()
                       {
                           Price = item.Price,
                           Address = item.Address,
                           Bathroom = item.Bathroom,
                           BesprovodnoiInternet = item.BesprovodnoiInternet,
                           City = item.City,
                           FloorAll = item.FloorAll,
                           FloorCurrent = item.FloorCurrent,
                           Funiture = item.Funiture,
                           Kondicioner = item.Kondicioner,
                           PartyFree = item.PartyFree,
                           RoomQuantity = item.RoomQuantity,
                           TipArendy = item.TipArendy,
                           TV = item.TV,
                           FlatId = item.FlatID,
                       }).ToList();

在课堂上更改您的媒体get的{​​{1}}访问者:

ImagesString