1

これはかなり標準的なタスクだと思いますが、それでもLINQに慣れることはできません。データベース内のテーブルから正確に2つの行が必要であり、現在は2つの別々のLINQクエリを使用しています。

        imageInfo = AppConfigService.All().Where(a =>(a.ConfigProperty == "MaterialImages")).FirstOrDefault();
        imageLocation = AppConfigService.All().Where(c => (c.ConfigProperty == "DefaultImagePath")).FirstOrDefault();

私が欲しいのは、情報を1つの変数に保持することです。たとえばimageInfo[0]、自分MaterialImagesと自分imageInfo[1]のために、DefaultImagePathまたはこのようなものです。LINQについての知識は非常に乏しいですが、2つのクエリは必要ないと思います。

4

4 に答える 4

4

あなたが使用することができConcatますTake(1)

var imageInfoLocation =
    (from a in AppConfigService
     where a.ConfigProperty == "MaterialImages"
     select cust).Take(1)
    .Concat(
    (from a in AppConfigService
     where a.ConfigProperty == "DefaultImagePath"
     select cust).Take(1))
;
于 2013-03-07T13:25:06.917 に答える
3

以下の単一のクエリを使用できますが、元のクエリの方が読みやすくなります。

var res = AppConfigService
    .All()
    .Where(a =>(a.ConfigProperty == "MaterialImages" || a.ConfigProperty == "DefaultImagePath"))
    .GroupBy(a => a.ConfigProperty)
    .ToDictionary(g => g.Key, g => g.FirstOrDefault());

これにより、2つ以下のアイテムのディクショナリが返されます。1つは、用でConfigProperty、もう1つはそのプロパティを持つ最初のアイテムまたはデフォルトアイテム用です。"MaterialImages"またはを含むソース行がない場合"DefaultImagePath"、結果には2つ未満の項目が含まれます。対応する定数をキーとして検索することにより、辞書から値を取得できます。

于 2013-03-07T13:25:17.233 に答える
1

2つの異なる条件を満たすリストから最初の要素が必要なため、1つのクエリで実行することはできないと思います。1つのコレクションで結果を取得したい場合は、unionを使用できます。

var union = imageInfo = AppConfigService.All().
   Where(a =>(a.ConfigProperty == "MaterialImages")).FirstOrDefault().
  Union(
           AppConfigService.All().Where(c => (c.ConfigProperty ==
                                        "DefaultImagePath")).FirstOrDefault());
于 2013-03-07T13:27:01.287 に答える
-1

以下を使用できます、

 var rows = AppConfigService.All().Where(a =>(a.ConfigProperty == "MaterialImages" || c.ConfigProperty == "DefaultImagePath"));
于 2013-03-07T13:20:56.460 に答える