4

asp.netアプリケーションで検索機能を構築しており、LINQ to SQLを使用して、選択した検索条件に基づいてデータを取得しています。検索基準は

  1. 区域
  2. 室数
  3. 家賃サイクル

最初の検索基準であるCountryのみが必須フィールドです。ただし、ユーザーが基準2、3、4、および/または5の値を入力した場合は、入力された値が考慮され、入力されたすべての検索基準に一致する結果のみが取得されます。基準2、3、4、および/または5のいずれかが空(null)のままである場合、LINQは「DONTCARE」として機能し、その行を返す必要があることに注意してください。

したがって、たとえば、入力された基準が次の場合:

  1. 国=米国
  2. City = null
  3. 地区=null
  4. 部屋の数=null
  5. 賃貸サイクル=null

次に、Country==USAのすべての行が返されます。

もう一つの例:

  1. 国=英国
  2. City = null
  3. 地区=null
  4. 部屋の数=5
  5. 賃貸サイクル=null

次に、Country==UKおよびNumberOfRooms==5のすべての行が返されます。

LINQ to SQLでこれを実現するにはどうすればよいですか?

これが私がこれまでに持っているものです:

var data = from x in db.Units where x.Country == coutnryID && /*PLEASE HELP!*/ select x;
4

3 に答える 3

4

cityIdこれを試してください( 、districtIdroomsおよびが検索対象の変数であると仮定しrentCycleます:

var data = from x in db.Units
    where x.Country == countryId
        && (cityId == null || x.City == cityId)
        && (districtId == null || x.District == districtId)
        && (rooms == null || x.Rooms == rooms)
        && (rentCycle == null || x.RentCycle == rentCycle)
    select x; 

基本的に、検索したい変数が null の場合は無視し、そうでない場合はUnit.

于 2012-05-24T16:36:03.830 に答える
1

GetValueOrDefault を使用して、null の場合は現在の値にデフォルトを指定します。

var data = from x in db.Units
    where x.Country == countryId
        && (x.City == cityId.GetValueOrDefault(x.City))
        && (x.District == districtId.GetValueOrDefault(x.District))
        && (x.Rooms == rooms.GetValueOrDefault(x.Rooms))
        && (x.RentCycle == rentCycle.GetValueOrDefault(x.RentCycle))
    select x; 
于 2012-05-24T17:03:22.897 に答える
1

クエリは段階的に作成できます。

var query = from x in db.Units  where x.Country == countryId;
if (cityId != null)        query = query.Where(x.City == cityId);
if (districtId != null)    query = query.Where(x.City == districtId);
if (rooms != null)         query = query.Where(x.Rooms == rooms);
if (rentCycle != null)     query = query.Where(x.RentCycle == rentCycle);
var data = query.Select();

少し乱雑なC#の場合、これによりSQLが少し効率的になります

于 2012-05-24T16:55:32.280 に答える