-1

よく検索しましたが、問題の適切な解決策が見つかりませんでした。

私がしようとしているのはSQLで非常に基本的なことですが、ラムダ式でそれを機能させる方法がわかりません。ここでは、私がやろうとしていることです:

    FilteredInOrderquery = mycontext.Websites.OrderBy(website.currentOrderBy + " " + website.sortOrder).Where(
        x => (website.websiteFilterList.Contains(x.site.ToString()))

            &&
            (website.cityFilterList.Contains(x.city.ToString()))

           ).Select(x => new WebsiteData(
              x.RowID,
              x.pagetype,
              x.site,
              x.creationdate ?? DateTime.Today,
              x.expirationdate ?? DateTime.Today,
              x.domainregistrar,
              x.pin,
              x.area,
              x.city,
             ((x.expirationdate ?? DateTime.Today) - DateTime.Today).Days.ToString() + " days"));

websitefilterList と cityFilterlist はどちらも空にすることも、複数の項目を含めることもできます。

ポイントは、リストのいずれかを空として渡してもレコードを取得できるはずです(リストが空の場合、その列のすべてのレコードを取得する必要があります)

複数のエントリを持つ両方のリストを渡すと、それらのエントリに一致するレコードのみが表示されます。

現在、これは起こっていません。リストのいずれかが空の場合、エラーが発生します。リストのいずれかが空の場合は、すべてのレコードを取得する必要があります。これは非常に一般的な要件ですが、解決策が見つかりませんでした。

4

1 に答える 1

0
Where(x => 
(!website.websiteFilterList.Any() || website.websiteFilterList.Contains(x.site.ToString()))
&&
(!website.cityFilterList.Any() || website.cityFilterList.Contains(x.city.ToString())))
于 2013-05-04T15:09:45.853 に答える