クエリにリテラル値を追加する必要があります。私の試み上記の例ではLinq Union:クエリにリテラル値を追加する方法は?
var aa = new List<long>();
aa.Add(0);
var a = Products.Select(p => p.sku).Distinct().Union(aa);
a.ToList().Dump(); // LinqPad's way of showing the values
は、私はエラーを取得する:
"Local sequence cannot be used in LINQ to SQL implementation
of query operators except the Contains() operator."
私は例えばEntity Frameworkの4を使用していた場合は、は、私はいつも "が含まれるようにUNION文に何を追加することができますシード "ID?
私は、次のようなSQLコードを生成しようとしています:私は次の最も高い値が存在しないすべての値を見つけることができます後、私は自分自身にリストをjoin
できるよう
select distinct ID
from product
union
select 0 as ID
(最低発見セット内の利用可能なID)。
編集:オリジナルのLINQクエリの利用可能な最低IDに
var skuQuery = Context.Products
.Where(p => p.sku > skuSeedStart &&
p.sku < skuSeedEnd)
.Select(p => p.sku).Distinct();
var lowestSkuAvailableList =
(from p1 in skuQuery
from p2 in skuQuery.Where(a => a == p1 + 1).DefaultIfEmpty()
where p2 == 0 // zero is default for long where it would be null
select p1).ToList();
var Answer = (lowestSkuAvailableList.Count == 0
? skuSeedStart :
lowestSkuAvailableList.Min()) + 1;
を見つけるために、このコードは、1によりオフセット2 SKUがセットを作成し、次に高いが存在しないSKUを選択します。その後、最小のSKUが選択されます(最も低いSKUが次に使用可能な場合)。
これが機能するためには、シードはセットで一緒に結合されている必要があります。
コード最終的には「シード」を下回らない可能な最小のIDを取得します。
次に、あなたはこのようなあなたの表現を書き換えることができます。現在、既存のIDから始まる最低のIDを取得します。したがって、なぜ "0"がクエリの一部である必要があるのか。 SQLでは、「製品ユニオンからID 0を選択してIDを選択」(私は別個の値を選択することを明確にするために追加しました) –
@Dr。 Zim:このような実際のリテラル値をLINQ-to-SQLクエリに導入することは可能ではないと思います。あなたがより大きな文脈であなたの質問を投稿することができるならば、私たちは猫をスキンする別の方法を見つけることができるかもしれませんが、原則としてそれは不可能です。 –
元のLinqクエリを追加しました:) –