2

例えば:

var sList = from ASL in aslist
            where ASL.Description == as.ToString()
            select ASL;
as = sList.FirstOrDefault();
var rList = from ARL in arlist
            where ARL.Description == rDescription && ARL.Id == as.Id
            select ARL;

ご覧のとおり、クエリの最後の条件rList(つまり&& ARL.Id == as.Id) は、クエリから取得した値に基づいていsListます。私の問題はいつsListですかNULL、エラーが発生します。nullでない&& ARL.Id == as.Id場合にのみ、最後の条件(つまり)を含めたい。sList

以下に示すように if else を使用して実行できますが、可能であれば LINQ を使用してエレガントに実行したいと考えています。

if (as != null)
{
    // include ARL.Id == as.Id condition in the query
} 
else
{
    // exclude ARL.Id == as.Id condition from the query
}

前もって感謝します!

4

2 に答える 2

6
&& (assetsensor == null || ARL.SensorID == assetsensor.ID)
于 2013-05-02T20:52:52.170 に答える
0

使用しているクエリ プロバイダーによっては、条件がそこに属していないと事前に判断できる場合は、LINQ クエリに条件をまったく含めないことをお勧めします。LINQ to Objects を使用している場合はおそらく大きな違いはありませんが、LINQ to SQL または LINQ to Entities を使用している場合、クエリに無関係な条件を含めると、クエリ プロバイダーが不要な SQL コードを生成する可能性があります。パフォーマンスに影響を与える可能性のある結合、または欠損値のテストに使用しているコードをプロバイダーが理解していない場合は、まったく機能しない可能性さえあります。

私は次のようなことをします:

var sList = from ASL in assetsensorlist
            where ASL.Description == assetSensor.ToString()
            select ASL;
assetsensor = sList.FirstOrDefault();

var rList = from ARL in assetruleslist
            where ARL.Description == ruleDescription
            select ARL;

if (assentsensor != null)
{
  // Fluent syntax is simpler for this purpose
  rList = rList.Where(x => x.SensorID == assetsensor.ID);
}
于 2013-05-02T21:49:03.033 に答える