2

したがって、オフィスの場所の表があり、各列には関連情報(つまり、オフィス名、住所、市、州、郵便番号、国)が含まれています。

ユーザーが自分のオフィスを選択できるようにインターフェイスに設定しました。残りはユーザーが入力します。

同じテーブルのオフィスの場所を一覧表示するドロップダウンメニューを使用して行ったように、汎用リストを使用して1つの列に複数の行を入力する方法を知っています。

私が知らないのは、単一の行から複数​​の列を汎用リストに追加する方法です。

たとえば、前者のコードは次のとおりです。これは正常に機能します。

    private List<string> selectLocs()
    {
        Locs offLoc = new Locs();

        List<string> objList = new List<string>();

        var select = from l in offLoc.Locations
                     orderby l.OFFICE
                     select l;

        foreach (Location loc in select)
        {
            objList.Add(loc.OFFICE);
        }

        return objList;
    }

同じことを行う方法がわからないため、後者の状況のコードは不完全です。

    private List<string> selectAddr(string strLoc)
    {
        List<string> objList = new List<string>();

        Locs offLocs = new Locs();

        var select = from l in offLocs.Locations
                     where l.OFFICE == strLoc
                     select l;

        //foreach what? in select? Do I even use a foreach loop?


        return objList;
    }

なぜこれまで誰もこれを尋ねなかったのかわからない。

4

3 に答える 3

4

最初の方法は単純化できます。

private List<string> SelectLocations()
{
    Locs offLoc = new Locs();
    return (from l in offLoc.Locations
            orderby l.OFFICE
            select l.OFFICE).ToList();
}

2番目の方法:

private List<string> SelectAddresses(string strLoc)
{
    Locs offLocs = new Locs();
    return (from l in offLocs.Locations
            where l.OFFICE == strLoc
            select l.ADDRESS).ToList();
}

更新:複数の属性が必要な場合は、完全な場所オブジェクトを返します。

private List<Location> SelectLocations(string strLoc)
{
    Locs offLocs = new Locs();
    return (from l in offLocs.Locations
            where l.OFFICE == strLoc
            select l).ToList();
}

また、ハンガリアン記法(変数の型を説明する変数名に接頭辞を追加する)の使用は避けてください。代わりにstrLocを使用できますlocationName

于 2012-07-12T13:28:42.343 に答える
3

あなたの最初の方法は

return new Locs().Locations.OrderBy(m => m.Office).Select(l => l.OFFICE).ToList()

2番目のクエリは、リストではなく場所を返す必要があります

private Location selectAddr(string strLoc)
{
    return new Locs().Locations.FirstOrDefault(m => m.OFFICE == strlLoc);
}

または、アドレスのリストが必要な場合(これは実際には明確ではありません)

private IList<string> selectAddr(string strLoc)
{
    return new Locs().Locations.Where(m => m.OFFICE == strlLoc)
    .Select(l => l.ADDRESS).ToList();
}

または場所のリスト

private IList<Location> selectAddr(string strLoc)
{
    return new Locs().Locations.Where(m => m.OFFICE == strlLoc)
    .ToList();
}
于 2012-07-12T13:30:49.303 に答える
2

セフェトゥス。上記の回答はすべて有効ですが、あなたの質問に回答しているかどうかはわかりません。行から複数​​の列を返す方法を尋ねていましたか?

ここで役立つ匿名タイプを利用できます。例:

private IList<string> selectAddr(string strLoc)
{
    Locs offLocs = new Locs();
    var xx = (from l in offLocs.Locations
            where l.OFFICE == strLoc
            select new { l.Address1, l.Address2, l.County });

return xx.Select(a=>String.Concat(x.Address1, x.Address2, x.County).ToList();

}

ただし、これをさらに単純化することができます。

private IList<string> selectAddr(string strLoc)
    {
        Locs offLocs = new Locs();
        return (from l in offLocs.Locations
                where l.OFFICE == strLoc
                select String.Concat(l.Address1, l.Address2, l.County)).ToList();

    }

またはさらに良い

var offLocs = new Locs();
return offLocs.Where(o=>o.Office = strLoc).Select(l=>String.Concat(l.Address1, l.Address2, l.County)).ToList();

しかし、それは好みの問題です!

于 2012-07-12T13:43:46.427 に答える