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

ここで何を達成しようとしていますか? 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 に答える
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 に答える