0

查询: 我想返回所有带有 CUISINE__BANE = cusisineName 的餐厅,无论它们位于哪个城市。我的查询返回 RESTAURANT 和 CITY 表,但不返回 CUISINE 表。非常感谢您的帮助!

public class DLgetRestaurants
    {
        DL.FVRGDataContext db = new FVRGDataContext();

        public List<RESTAURANT> getRestaurants(string cuisineName)
        {
            var cuisineID = db.CUISINEs.First(s => s.CUISINE_NAME == cuisineName).CUISINE_ID;

            List<RESTAURANT> result = (from RESTAURANT in db.RESTAURANTs
                                       join CITY in db.CITies on RESTAURANT.CITY_ID equals CITY.CITY_ID
                                       join CUISINE in db.CUISINEs on RESTAURANT.CUISINE_ID equals CUISINE.CUISINE_ID
                                       where RESTAURANT.CUISINE_ID == cuisineID
                                       select RESTAURANT).ToList();

             return result;
        }
    }
4

3 回答 3

0

我怀疑您的查询是否确实返回了城市 - 您目前只在查询中选择餐厅,而不是您可以投影到具有您想要的信息的特殊类型:

class RestaurantByCuisine
{
  public string RestaurantName {get;set;}
  public string CityName {get;set;}
  public string CuisineName {get;set;}
}

public List<RestaurantByCuisine> getRestaurants(string cuisineName)
{
    var cuisineID = db.CUISINEs.First(s => s.CUISINE_NAME == cuisineName).CUISINE_ID;

    List<RestaurantByCuisine> result = (from RESTAURANT in db.RESTAURANTs
                                join CITY in db.CITies on RESTAURANT.CITY_ID equals CITY.CITY_ID
                                join CUISINE in db.CUISINEs on RESTAURANT.CUISINE_ID equals CUISINE.CUISINE_ID
                                where RESTAURANT.CUISINE_ID == cuisineID
                                select new RestaurantByCuisine() 
                                { 
                                    RestaurantName = RESTAURANT.Name,
                                    CityName = CITY.Name,
                                    CuisineName = CUISINE.Name
                              ).ToList();

    return result;
}

这假设您的实体有一个Name属性,否则用正确的属性名称替换。

请注意,您的 Restaurant 实体已经具有CITY_ID,CUISINE_ID属性,因此如果这是各个表的外键,您还应该具有CITY,CUISINE属性。如果您Include()对这些属性使用查询,这些将被填充,查询将如下所示:

List<RESTAURANT> result = (from RESTAURANT in db.RESTAURANTs.Include(x => x.CITY).Include(x => x.CUISINE)
                            where RESTAURANT.CUISINE_ID == cuisineID
                            select RESTAURANT
                            ).ToList();

编辑:

听起来您正在使用 Linq to Sql,在这种情况下,您可以直接在数据上下文中指定加载选项:

DL.FVRGDataContext db = new FVRGDataContext();
var dlo = new DataLoadOptions();
dlo.LoadWith<RESTAURANT>(r => r.CITY);
dlo.LoadWith<RESTAURANT>(r => r.CUISINE);
db.LoadOptions = dlo;

然后以下应该工作:

List<RESTAURANT> result = (from RESTAURANT in db.RESTAURANTs
                           where RESTAURANT.CUISINE_ID == cuisineID
                           select RESTAURANT
                           ).ToList();
于 2011-07-11T19:15:36.907 回答
0

您也可以像这样重新选择:

        List<RESTAURANT> result = (from RESTAURANT in db.RESTAURANTs.Include("CITY").Include("CUISINE")
                                   where RESTAURANT.CUISINE_ID == cuisineID
                                   select RESTAURANT).ToList();
于 2011-07-11T19:20:46.830 回答
0

你想在这里实现什么?如果您只需Cuisine要从每个访问,Restuarant您将能够遍历List<Restuarant>类似的...

List<Restuarant> restuarants = GetList(); // Get the list however you like.
foreach(var r in restuarants)
{
     // Now you can access Cuisine
     var cuisine = r.Cuisine;
}

您还可以获得这样的列表Cuisine...

var cuisines = restuarants.Where(c => c.CuisineName == "chips").ToList();

或类似的东西。

于 2011-07-11T21:10:58.250 回答