如何访问查询变量的每个元素

时间:2016-06-18 16:02:01

标签: c# wpf linq

我是C#和WPF的新手。假设我有一张桌子。该表有两个字段:" firstName"和" birthDate"。我写了一个查询来获取"出生日"记录,然后我想在数据网格上显示它。但在此之前,我想改变"格里高利日期"到" jalali约会"有功能。

在C#中

var searchQueryOfDateAndTime = (from b in FaceDB.tblCameras
                                        join c in FaceDB.tblTraffics
                                       on b.Camera_Id equals c.Camera_Id
                                       join a in FaceDB.tblknownPeoples
                                       on c.IdNumber equals a.IdNumber

                                       where
                                       (
                                           string.Compare(c.EntryDate.ToString(), miladiFromDate.ToString()) >= 0
                                           &&
                                           string.Compare(c.EntryDate.ToString(), miladiToDate.ToString()) <= 0
                                       )
                                       where
                                       (
                                           string.IsNullOrEmpty(timFromHour.Text.ToString())
                                           ||
                                           string.Compare(c.EntryTime.ToString(), timFromHour.Text.ToString()) >= 0
                                           &&
                                           string.IsNullOrEmpty(timToHour.Text.ToString())
                                           ||
                                           string.Compare(c.ExitTime.ToString(), timToHour.Text.ToString()) <= 0
                                       )

                                       select new { a.Name, a.Family, EntryDate = Georgian2Jalali(c.EntryDate), c.EntryTime, a.Occupation, ExitDate = Georgian2Jalali(c.ExitDate), c.ExitTime, b.Camera_Name, c.PicAddress, a.FirstPicAddress, c.IdNumber, c.Camera_Id }).ToList();

        dgvFinalyReport.ItemsSource = searchQueryOfDateAndTime;

并在WPF中:

<DataGrid x:Name="dgvFinalyReport" Height="431" Width="630" Canvas.Left="273" Canvas.Top="10" AutoGenerateColumns="False" CanUserDeleteRows="False">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="firstname" Binding="{Binding Name}" Width="78" />
                        <DataGridTextColumn Header="Last name" Binding="{Binding Family}" Width="78" />
                        <DataGridTextColumn Header="Entry date" Binding="{Binding EntryDate}" Width="78" />
                        <DataGridTextColumn Header="entry time" Binding="{Binding EntryTime}" Width="78" />
                        <DataGridTextColumn Header="exit date" Binding="{Binding ExitDate}" Width="78" />
                        <DataGridTextColumn Header="exit time" Binding="{Binding ExitTime}" Width="78" />
                        <DataGridTextColumn Header="occupation" Binding="{Binding Occupation}" Width="78" />
                        <DataGridTextColumn Header="Cam_Name" Binding="{Binding Camera_Name}" Width="78" />
                        <DataGridTextColumn Header="getface" Binding="{Binding PicAddress}" Width="78" />
                        <DataGridTextColumn Header="first face" Binding="{Binding FirstPicAddress}" Width="78" />
                    </DataGrid.Columns>
                </DataGrid>

2 个答案:

答案 0 :(得分:1)

由于new {}创建了只读匿名类型,因此您无法循环查询并更新birthdate的值。相反,您可以直接更改值:

var query = from f in mydb.mytbl.AsEnumerable()
select new
{
    f.firstName,
    BirthDate = ConvertToJalali(f.BirthDate)
};

private DateTime ConvertToJalali(DateTime dt)
{
 // your implementation here
}

注意:请注意使用AsEnumerable(),因为它会将数据库中的所有记录拖入内存,但在您的特定情况下,它没有任何区别,因为您没有任何地方子句。

答案 1 :(得分:1)

另一种方法是创建一个转换器,它接受格里高利日期并将其转换为Jalali日期:

<DataGridTextColumn Header="Birth Day"
                    Binding="{Binding birthDate, Converter={StaticResource JalaliDateConverter}}"
                    Width="80" />

然后在你的XAML中你有:

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) {
            this.bmImage = bmImage;
        }

        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];
            Bitmap mIcon11 = null;
            try {
                InputStream in = new java.net.URL(urldisplay).openStream();
                mIcon11 = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return mIcon11;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }

有关转换器的详细教程,请参阅here